HTTP Content-Type

发布于:2025-07-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

什么是 MIME 类型?

MIME 类型(Multipurpose Internet Mail Extensions) 是一种标准,用于描述互联网上传输文件的数据类型,它告诉接收方(比如浏览器、服务器等)如何正确处理数据。MIME 类型是根据文件的性质和格式在 Internet 上标识文件的标准方法,而 Content-Type 标头使用 MIME 类型来指示正在发送或接收的资源类型。

 


 

MIME 类型的结构

MIME 类型由两部分组成,使用斜杠分隔:

  • 主类型:代表文件的大类(例如:textimageaudio 等)。
  • 子类型:进一步定义该类的具体类型(例如:text/plain、image/png、audio/mpeg 等)。

 


 

常见的 MIME 类型

text 类型

内容是可以直接以文本形式查看和编辑的,适合显示在浏览器中或通过文本编辑器查看,通常采用字符编码(如 UTF-8、ASCII 等),而不是二进制编码。

text/plain:纯文本格式

POST /api/message HTTP/1.1
Content-Type: text/plain
Content-Length: 27

Hello, this is a plain text message.

text/html:HTML 格式

 

POST /submit-form HTTP/1.1
Content-Type: text/html
Content-Length: 65

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Form Data</title>
</head>
<body>
    <h1>User Information</h1>
    <p>Name: John Doe</p>
    <p>Email: john@example.com</p>
</body>
</html>

text/css:CSS 格式

 

POST /upload-css HTTP/1.1
Content-Type: text/css
Content-Length: 45

body {
  background-color: #f0f0f0;
  font-family: Arial, sans-serif;
}

h1 {
  color: #333;
}

text/javascript:JavaScript 格式

POST /execute-script HTTP/1.1
Content-Type: text/javascript
Content-Length: 39

document.getElementById('output').innerHTML = 'Hello World';

 

application 类型

application/ 类型的内容可能包含任意类型的数据,包括二进制格式、文件格式、加密内容等。

application/json:JSON 格式数据

POST /api/user HTTP/1.1
Content-Type: application/json
Content-Length: 52

{
  "name": "John Doe",
  "email": "john@example.com",
  "age": 30
}

application/xml:XML格式数据

POST /api/user HTTP/1.1
Content-Type: application/xml
Content-Length: 98

<user>
  <name>John Doe</name>
  <email>john@example.com</email>
  <age>30</age>
</user>

application/x-www-form-urlencoded:表单数据

POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 34

username=johndoe&password=secret123

application/octet-stream:通用的二进制数据,常用于文件上传或下载

POST /upload HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 2097152

<二进制文件内容>

 

Multipart 类型

multipart/form-data:用于表单数据提交,尤其是文件上传

POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=------------------------abcdef123456
Content-Length: 429

--------------------------abcdef123456
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg

<文件的二进制数据>
--------------------------abcdef123456
Content-Disposition: form-data; name="description"

This is an image of a sunset.
--------------------------abcdef123456--

由于 multipart/form-data 类型较其他类型更加复杂,因此介绍其中每个部分如下:

1. Boundary

boundary=------------------------abcdef123456 是分隔符,用于将不同的部分分隔开。在实际请求中,boundary 是唯一的,可以防止不同部分混淆。这个 boundary 值是由浏览器自动生成的,并用于标识各部分数据的开始和结束。

2. 文件字段

Content-Disposition: form-data; name="file"; filename="image.jpg":这里指定了文件字段的名称(file),以及上传的文件名(image.jpg)。

Content-Type: image/jpeg:表示上传的文件类型是 image/jpeg,即一张 JPEG 图片。

<文件的二进制数据>:这里是实际的文件内容,浏览器会将文件的二进制数据放在这里。

3. 普通字段

Content-Disposition: form-data; name="description":表示这是一个名为 description 的字段。

This is an image of a sunset.:这是表单中的普通文本字段内容,即用户提供的描述信息。

4. 分隔符结尾

请求体的结尾以 --------------------------abcdef123456-- 标识,表示所有部分的结束。

 

 

💡对比 application/octet-stream 和 multipart/form-data

  application/octet-stream multipart/form-data
数据结构 一个完整的二进制流 数据被分割成多个部分(每个部分由 boundary 分隔)
数据类型 没有数据类型限制,适用于任何类型的二进制数据 可以包含多个不同的数据类型(文件、文本、数字等)
处理方式 数据是单一的二进制流 每部分数据都有独立的头部信息(如字段名、文件名等)
适用场景 单一文件上传、下载或传输原始二进制数据 多部分表单提交,尤其是文件上传与文本字段混合的场景
典型请求格式 文件数据直接作为二进制流发送 通过 boundary 分隔的多个数据块组成请求体

 

图像、音频、视频类型

  • image/jpeg:JPEG 图像
  • image/png:PNG 图像
  • image/gif:GIF 图像
  • audio/mpeg:MP3 音频文件
  • video/mp4:MP4 视频文件

 


 

参考

Content-Type header - HTTP | MDN

Media types (MIME types) - HTTP | MDN

 

 


网站公告

今日签到

点亮在社区的每一天
去签到