以下是常见的 POST 请求内容类型(Content-Type)及其使用场景的详细总结:
1. application/x-www-form-urlencoded
- 格式:
key1=value1&key2=value2(URL 编码) - 特点:
- 默认的表单提交格式
- 数据会被 URL 编码(如空格变
+,中文变%XX)
- 示例:
POST /submit HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=admin&password=123456 - 适用场景:
- HTML 表单提交
- 简单的键值对数据传输
2. multipart/form-data
- 格式:分块传输,每块用边界符分隔(
boundary) - 特点:
- 支持文件上传
- 数据不编码,直接传输原始二进制
- 示例:
POST /upload HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ----WebKitFormBoundaryABC123 Content-Disposition: form-data; name="username" admin ----WebKitFormBoundaryABC123 Content-Disposition: form-data; name="file"; filename="test.jpg" Content-Type: image/jpeg [二进制文件数据] ----WebKitFormBoundaryABC123-- - 适用场景:
- 文件上传
- 混合文本和二进制数据提交
3. application/json
- 格式:JSON 结构化数据
- 特点:
- 支持复杂嵌套数据结构
- 现代 API 的主流格式
- 示例:
POST /api/users HTTP/1.1 Content-Type: application/json { "name": "张三", "age": 25, "address": { "city": "北京" } } - 适用场景:
- RESTful API 通信
- 需要传递结构化数据的场景
4. text/plain
- 格式:纯文本
- 特点:
- 不进行任何编码
- 极少用于生产环境
- 示例:
POST /log HTTP/1.1 Content-Type: text/plain This is a plain text message. - 适用场景:
- 调试或日志记录
- 极简文本传输
5. application/xml
- 格式:XML 结构化数据
- 特点:
- 可读性强但冗余
- 逐渐被 JSON 替代
- 示例:
POST /api HTTP/1.1 Content-Type: application/xml <user> <name>张三</name> <age>25</age> </user> - 适用场景:
- 传统企业系统对接(如 SOAP)
- 需要 XML 格式的遗留系统
6. application/octet-stream
- 格式:原始二进制流
- 特点:
- 不指定具体数据类型
- 服务器需自行解析
- 示例:
POST /upload-binary HTTP/1.1 Content-Type: application/octet-stream [原始二进制数据] - 适用场景:
- 通用二进制文件传输
- 自定义协议数据交换
7. 其他特殊类型
| Content-Type | 用途 |
|---|---|
application/graphql | GraphQL 查询 |
application/soap+xml | SOAP Web 服务调用 |
application/javascript | 传输 JS 代码(罕见) |
如何选择?
- 简单表单 →
x-www-form-urlencoded - 文件上传 →
multipart/form-data - API 交互 →
application/json - 二进制数据 →
octet-stream - 传统系统 →
application/xml
各语言示例代码
Python (Requests)
# JSON
requests.post(url, json={"key": "value"})
# Form-data
requests.post(url, data={"key": "value"})
# File upload
requests.post(url, files={"file": open("test.jpg", "rb")})
JavaScript (Fetch)
// JSON
fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key: 'value' })
});
// Form-data
const formData = new FormData();
formData.append('file', fileInput.files[0]);
fetch(url, { method: 'POST', body: formData });
Java (Spring Boot)
// JSON
@PostMapping("/api")
public ResponseEntity<?> handleJson(@RequestBody UserDTO user) {
// ...
}
// Multipart
@PostMapping("/upload")
public String uploadFile(@RequestParam MultipartFile file) {
// ...
}
关键注意事项
- 安全:敏感数据避免用
x-www-form-urlencoded的 GET 请求 - 性能:大文件用
multipart/form-data,小数据用 JSON - 兼容性:传统系统可能仅支持 XML 或 form-data
- Content-Type 必须正确设置,否则服务器无法解析数据
1万+

被折叠的 条评论
为什么被折叠?



