Content-Type学习笔记
maiaimei 2025/8/26
# application/x-www-form-urlencoded
- 数据格式:
- 表单数据会被编码为键值对,格式为
key1=value1&key2=value2
。 - 特殊字符(如空格、
&
等)会被 URL 编码(例如空格会变成+
或%20
)。
- 表单数据会被编码为键值对,格式为
- 数据传输方式:
- 对于
GET
请求,数据会被附加到 URL 的查询字符串中。 - 对于
POST
请求,数据会被附加到请求体中。
- 对于
- 特点:
- 适合传输简单的键值对数据。
- 数据体积较小,效率较高。
- 不支持文件上传。
- 常见场景:
- 提交简单的表单数据(如登录表单、搜索表单)。
- 适用于键值对数据的传输。
# multipart/form-data
- 数据格式:
- 表单数据会被分成多个部分,每部分都有自己的内容描述(
Content-Disposition
)。 - 每部分可以包含不同类型的数据(如文本、文件)。
- 表单数据会被分成多个部分,每部分都有自己的内容描述(
- 数据传输方式:
- 数据会被分块上传,每块都有自己的边界标识。
- 适合传输复杂数据(如文件)。
- 特点:
- 支持文件上传。
- 数据体积较大,传输效率较低。
- 解析较复杂,需要专门的解析器。
- 常见场景:
- 文件上传表单(如图片、文档上传)。
- 复杂表单数据(包含文本和文件)。
Content-Disposition
是一个 HTTP 头字段,主要用于描述内容的呈现方式。它可以指定内容是作为附件下载,还是直接显示在浏览器中。
在 multipart/form-data
中,Content-Disposition
是必需的,没有它,服务器无法正确解析表单数据,它描述每个表单字段的元信息(字段名、文件名等)。通常包含以下信息:
form-data
: 表示这是表单数据。name
: 表单字段的名称。filename
(可选): 如果该字段是文件上传,则包含文件的原始名称。
在 multipart/form-data
的每个部分中,Content-Disposition
的格式如下:
Content-Disposition: form-data; name="fieldName"
1
如果是文件上传,还会包含 filename
,可附加 Content-Type
指定文件类型:
Content-Disposition: form-data; name="fieldName"; filename="example.txt"
Content-Type: text/plain
1
2
2
以下是一个包含普通字段和文件上传的示例:
POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="username"
john_doe
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="example.txt"
Content-Type: text/plain
(file content here)
------WebKitFormBoundary7MA4YWxkTrZu0gW--
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13