Content-Type学习笔记

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 是必需的,没有它,服务器无法正确解析表单数据,它描述每个表单字段的元信息(字段名、文件名等)。通常包含以下信息:

  1. form-data: 表示这是表单数据。
  2. name: 表单字段的名称。
  3. 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

以下是一个包含普通字段和文件上传的示例:

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