请求体包含实际发送的数据,通常在 POST 和 PUT 请求中使用。请求体的格式取决于 Content-Type的设置。
- application/x-www-form-urlencode
username=%E5%BC%A0%E4%B8%89&password=123+456
场景: 它只适合传输简单的文本数据,比如用户登录、注册、提交搜索表单等。它无法用于文件上传。
- multipart/form-data
场景: 文件上传是其唯一且最重要的应用场景
- application/json 这是前后端分离架构下,RESTful API 通信的主流方式。
场景: 几乎所有的非文件上传的 API 请求(增、删、改、查)都推荐使用 application/json,因为它结构清晰、可读性强、易于扩展,且与现代前端框架(如 Vue, React)无缝对接。
| 特性 (Feature) | application/x-www-form-urlencoded | multipart/form-data | application/json |
|---|---|---|---|
| 编码方式 | Key-Value键值对,通过&分隔,所有内容都进行URL编码 | 多部分(Multi-part)结构,由boundary分隔,每部分可有独立的Content-Type | 单个完整的JSON字符串 |
| 数据结构 | 扁平的键值对 | 复杂的、多部分的数据,可以是文本或文件 | 复杂的、可嵌套的结构(对象、数组等) |
| 主要用途 | 绝大多数不带文件的HTML表单提交(如登录、搜索) | 文件上传,或混合了文件和文本的表单 | 现代Web API的数据交换(前后端分离项目的事实标准) |
| 二进制/文件 | 不支持 | 支持 | 不支持(可通过Base64编码,但效率低) |
| 可读性 | 编码后可读性差 | 结构清晰,但内容较多 | 可读性非常好 |