核心区别在于数据传输位置、长度限制、安全性影响及后端接收方式:GET将参数拼在URL后,可见、有长度限制(约2KB)、适合无副作用查询;POST将数据放请求体中,URL干净、无硬长度限制、支持文件上传和UTF-8,适合状态变更操作。

HTML表单用 method="GET" 或 method="POST" 控制数据怎么传,核心区别不在“能不能传”,而在“怎么传、传哪儿、有什么影响”。
数据去哪儿了?位置决定可见性
GET 把所有字段值拼进 URL 后面,像这样:
https://example.com/search?name=张三&age=25
用户一眼能看到,浏览器地址栏、历史记录、服务器日志里全留痕。
POST 把数据藏在请求体(body)里,URL 干干净净,地址栏只显示目标地址,比如:
https://example.com/login
数据本身不暴露,但注意:没配 HTTPS 的话,请求体照样能被中间人截获。
能传多少?长度和内容类型有硬约束
GET 受限于 URL 长度,主流浏览器通常最多支持 2048 字符,实际安全起见建议控制在 1024 字符内。超长会截断或报错。
POST 没有协议级长度限制,上传文件、大段文本、JSON 数据都靠它。
另外,GET 只能传 ASCII 兼容的编码(中文等需 URL 编码),POST 默认支持 UTF-8,原生处理中文、emoji 等没问题。
服务器怎么收?后端取值方式不同
服务端识别提交方式后,用不同机制读数据:
- GET 提交 → 用
Request.QueryString(ASP)、$_GET(PHP)、request.args(Flask)等读 URL 参数 - POST 提交 → 用
Request.Form(ASP)、$_POST(PHP)、request.form(Flask)读请求体
$_POST['user'],结果就是空。
什么时候该选哪个?看操作本质
不是“登录就用 POST,搜索就用 GET”,而是看这个动作有没有“副作用”:
- 查数据、翻页、筛选、刷新页面不改状态 → 用 GET。好处是可书签、可缓存、可后退重试不弹警告
- 改数据、发消息、上传文件、扣库存、创建账号 → 用 POST。避免重复提交导致多次下单、重复注册等问题



















