GET vs POST 的区别
核心语义
|
GET |
POST |
| 语义 |
获取资源 |
提交数据/创建资源 |
| 幂等 |
✅ 是 |
❌ 否 |
| 安全性(只读) |
✅ 不修改服务端状态 |
❌ 会修改 |
数据传递方式
// GET:参数拼在 URL 上(Query String)
GET /api/users?page=1&size=10
// POST:数据放在请求体(Body)
POST /api/users
Content-Type: application/json
{ "name": "Alice", "age": 18 }
主要区别对比
| 特性 |
GET |
POST |
| 参数位置 |
URL 查询字符串 |
请求体 Body |
| 可见性 |
参数暴露在 URL 中 |
Body 不直接可见 |
| 长度限制 |
受 URL 长度限制(~2048字符) |
Body 理论无限制 |
| 缓存 |
浏览器会缓存 |
默认不缓存 |
| 浏览器历史 |
URL 会记录在历史 |
不会 |
| 书签 |
可以收藏 |
不行 |
| 重复提交 |
刷新页面不会提示 |
浏览器会弹出确认框 |
安全性误区
"POST 比 GET 更安全"——这是错的
GET /login?password=123 ← 密码在 URL,会被日志记录 ❌ 危险
POST /login body: { password: "123" } ← Body 不在 URL,稍好一点
但两者都是明文传输,真正的安全靠 HTTPS,而不是 GET/POST 的区别
使用场景
GET → 搜索、筛选、分页、查看详情(读取操作)
POST → 登录、注册、提交表单、创建资源(写入操作)
PUT → 更新资源(全量替换)
DELETE → 删除资源