
一、先搞懂:POST 与 PUT 的核心区别
在讲请求体前,先明确两个方法的本质差异:
|
维度 |
POST |
PUT |
|
核心语义 |
创建资源 / 提交数据 |
全量更新资源 |
|
幂等性 |
非幂等(重复提交出问题) |
幂等(多次执行结果一致) |
|
数据要求 |
按需传部分字段 |
必须传完整资源数据 |
二、6 种请求体类型深度解析
1. None(无请求体)
- 作用:仅通过 URL 传递参数,请求体为空
- 使用场景:POST:触发无需数据的操作(如刷新缓存,POST /cache/refresh)PUT:极少用,仅服务器允许 “空更新” 时使用
- 踩坑点:部分服务器会拒绝带 None 的 PUT 请求,需提前确认接口规范
2. form-data(multipart/form-data)
- 作用:分段传输数据,支持文件 + 文本混合提交
- 编码特点:用 boundary 分隔字段,每个部分有独立头信息
- 场景:POST:文件上传(头像 / 文档)、富文本提交(如POST /upload带图片 + 文字描述)PUT:更新资源时附带附件(如PUT /users/123传新头像 + 修改后的资料)
- 最佳实践:上传大文件时设置chunked分块传输显式指定文件名(filename=”avatar.png”)
- 踩坑指南:
❌ 未设置enctype=”multipart/form-data”导致文件损坏
✅ 表单提交加属性,Axios 需配置Content-Type: multipart/form-data
3. urlencoded(application/x-www-form-urlencoded)
- 作用:键值对以key=value&key2=value2编码传输
- 编码特点:中文 / 特殊字符转 UTF-8 百分号编码(如空格→%20)
- 场景:POST:简单表单提交(登录 / 注册,POST /login传username=张三&pwd=123)PUT:轻量全量更新(如PUT /settings改配置项)
- 踩坑指南:
❌ 传输复杂对象(嵌套 JSON)导致解析错误
✅ 复杂数据改用 JSON,仅简单键值对用此类型
4. Binary(application/octet-stream)
- 作用:直接传输二进制数据流,无编码处理
- 场景:POST:上传原始二进制文件(如POST /file传未处理的图片流)PUT:替换二进制资源(如PUT /images/123更新原图)
- 最佳实践:配合Content-Length头指定数据大小传输前验证文件完整性(如 MD5 校验)
5. MsgPack
- 作用:二进制序列化格式,比 JSON 更小更快
- 核心优势:同数据体积比 JSON 小 50%,解析速度快 30%+
- 场景:POST:高并发接口(如秒杀下单POST /seckill)PUT:大数据量更新(如PUT /logs传海量日志)
- 踩坑指南:
❌ 前后端用不同 MsgPack 库导致解析失败
✅ 统一用官方库(如前端@msgpack/msgpack)
6. Raw
- 作用:传输未加工的原始数据,需指定具体格式
- 常见子类型:application/json:前后端主流(如POST /users传{“name”:”张三”})text/xml:旧系统接口适配
- 场景:POST:创建结构化资源(RESTful API 标准用法)PUT:全量更新 JSON 对象(如PUT /users/123传完整用户信息)
- 最佳实践:必带Content-Type: application/json头数据长度超 10KB 时压缩传输
三、核心区别对比表
|
类型 |
编码方式 |
最大特点 |
POST 典型场景 |
PUT 典型场景 |
|
None |
无 |
仅 URL 传参 |
触发操作 |
极少使用 |
|
form-data |
分段传输 |
支持文件 + 文本 |
头像上传 |
资料 + 附件更新 |
|
urlencoded |
URL 编码键值对 |
简单轻量 |
登录表单 |
配置项修改 |
|
Binary |
原生二进制 |
无编码损耗 |
原始文件上传 |
二进制资源替换 |
|
MsgPack |
二进制序列化 |
高效紧凑 |
秒杀接口 |
大数据更新 |
|
Raw(JSON) |
JSON 字符串 |
结构化强 |
创建用户 |
全量更新用户信息 |
四、实战避坑指南
- Content-Type 必配:
传 form-data 却写application/json,服务器会返回 415 错误
- PUT 幂等性保障:
用 form-data 更新时,需携带完整资源字段,缺失字段可能被置空
- MsgPack 调试技巧:
Postman 需安装 MsgPack 插件,否则无法预览数据
- 文件上传禁忌:
绝不用 urlencoded 传文件,会导致二进制数据转义损坏
五、总结
- 简单表单→urlencoded;带文件→form-data
- 结构化数据→Raw (JSON);高性能需求→MsgPack
- 纯二进制→Binary;无数据→None
记住:选对请求体 = 减少 80% 接口调试问题!
© 版权声明
文章版权归作者所有,未经允许请勿转载。

收藏了,感谢分享