https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
MIME 类型
媒体类型(通常称为 多用途 Internet 邮件扩展或 MIME类型 )是一种标准,表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和规范。
互联网号码分配机构(IANA)是负责追踪所有官方 MIME 类型的官方机构,您可以在媒体类型页面中找到最新的完整列表。
重要:浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理 URL,因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
语法
通用结构
type/subtype
MIME 的结构非常简单;由两个'/'
角色组成的中间类型的出现,然后组成。阻止间隔。类型表示可以被分几个子类的独立类别。子类型表示显示后的每个类型。
MIME 类型对大小写不敏感,但传统写法都是小写。
独立类型
text/plain text/html image/jpeg image/png audio/mpeg audio/ogg audio/* video/mp4 application/* application/json application/javascript application/ecmascript application/octet-stream …
独立证据证明了对文件的分类,可以是如下:
类型 | 描述 | 典型的例证 |
---|---|---|
text |
防御文件是普通文本,以后是人类神话 | text/plain , text/html ,text/css, text/javascript |
image |
不包括视频,但动态图(例如动态gif)也使用图像类型 | image/gif , image/png , image/jpeg , image/bmp , image/webp , image/x-icon ,image/vnd.microsoft.icon |
audio |
毫无疑问是你自己的文件 | audio/midi , audio/mpeg, audio/webm, audio/ogg, audio/wav |
video |
毫无征兆的视频文件 | video/webm , video/ogg |
application |
无可否认的数据 |
|
文本文件类型如果没有特定的子类型,就使用 text/plain
。类似的,二进制文件没有特定的或已知的子类型,即用于application/octet-stream
。
多部分类型
multipart/form-data multipart/byteranges
多部分类型表示可观看现场的文件类型的种类,多种不同的 MIME 类型。这是复合文件的一种表示方式。multipart/form-data
用于联系HTML 表单和POST
方法,此外 multipart/byteranges
使用状态码发送整个文件的子集,而HTTP 不能处理的复合特殊的方式:将信息直接发送给浏览器(文件可能会创建一个“保存其他”窗口,但不知道无法显示内联文件。)206
Partial Content
重要的 MIME 类型
应用程序/八位字节流
这是应用程序的默认值。英文是未知的应用程序文件,浏览器一般不会自动执行文件或执行。浏览器会对待设置了HTTP头Content-Disposition
值attachment
的文件一样来对待此类文件。
文本/普通
文本文件默认值。即使有可能是未知的文本文件,但浏览器认为可以直接展示的。
text/plain
并不是意味着某种文本数据。如果浏览器想要一个文本文件的明确类型,浏览器并不会考虑他们是否匹配。比如说,如果通过一个表明是下载CSS的文件<link>
链接下载了一个text/plain
文件。如果提供的信息是 text/plain,浏览器并不会认为这是有效的 CSS 文件。CSS 类型需要使用 text/css。
文字/CSS
在网页中要被解析为CSS的任何CSS文件必须指定MIME为text/css
通常,服务器不识别以的.css为后缀的文件的MIME类型,而是将其以MIME为。text/plain
或 application/octet-stream
来发送给浏览器:在这种情况下,大多数浏览器不识别其为 CSS 文件,直接忽略掉。特别要注意为 CSS 文件提供正确的 MIME。
文本/html
所有的 HTML 内容都应该使用这种类型。XHTML 的其他 MIME 类型(如application/xml+html
)现在基本不再使用(HTML5统一了这些格式)。
注意:您仍然需要使用application/xml
或application/xhtml+xml
如果您打算使用 XML 的严格解析规则,请使用<![CDATA[…]]>
来自非 HTML、非 SVG 或非 MathML XML 命名空间的 或 元素,因为text/html
的解析语义与application/xml
.
文本/javascript
根据 HTML 标准,应该text/javascript
总是使用 MI类型 服务 JavaScript 其他值发现有效,那些使用值可能会导致 ME 文件加载或运行。
历史原因,MIME嗅探标准(定义浏览器应该如何解释媒体类型和如何处理无有效媒体类型的内容)允许使用匹配以下任意类型的 MIME 服务 JavaScript:
application/javascript
application/ecmascript
application/x-ecmascript
application/x-javascript
text/javascript
text/ecmascript
text/javascript1.0
text/javascript1.1
text/javascript1.2
text/javascript1.3
text/javascript1.4
text/javascript1.5
text/jscript
text/livescript
text/x-ecmascript
text/x-javascript
注意:可能任何给定的用户代理都可能支持这些中的任意或所有,你只应该使用 text/javascript
。它是确定能在当前和以后正常工作的 MIME 类型。
你可能发现某些内容在text/javascript
媒体类型有一个细节charset
,指定用于代码内容的字符集。
图片类型
部分图片类型是被广泛支持的,Web 安全的,可以随时在 Web 页面中使用的:
MIME 类型 | 图片类型 |
---|---|
image/gif |
GIF图片 (无耗压缩方面被PNG所替代) |
image/jpeg |
JPEG 图片 |
image/png |
PNG图片 |
image/svg+xml |
SVG图片(矢量) |
这里的类型划分有一定的问题,认为这里应该增加WebP(image/webp
),更多新增的图片类型都会增加代码的数量,这会带来一些新的安全问题,所以浏览器供应商添加类型非常小心。
更多的图片种类可以在Web文档中找到。比如很多浏览器支持 图标类型的图标作为图标的图标, 或者浏览器在MIME类型中的image/x-icon
支持ICO图像。
- 脚注 1
- 虽然
image/vnd.microsoft.icon
在ANA注册,它仍然存在广泛支持,image/x-icon
被作为替代使用。
音频与视频
HTML没有并定义明确被用于<audio>
状语从句:<video>
元素所请立即获取iTunes的文件类型,所以在网络上使用的只有相对较小的一组类型。 文章 由HTML音频和视频内容支持的媒体格式解释了可以被使用的解码器或视频文件格式。
在网络环境中最常用的视频文件的格式,是以下这些文件类型:
MIME 类型 | 音频或视频 |
---|---|
audio/wave audio/wav audio/x-wav audio/x-pn-wav |
音频流媒体文件。一般支持PCM音频编码(WAVE编解码器“1”),其他解码器有限支持(如果有的话)。 |
audio/webm |
WebM音频文件格式。Vorbis和Opus是其最常用的解码器。 |
video/webm |
采用WebM视频文件格式的语音视频文件。VP8和VP9是其最常用的视频解码器。Vorbis和Opus是其最常用的音频解码器。 |
audio/ogg |
采用OGG多媒体文件格式的音频文件。Vorbis是这个多媒体文件格式的最常用的音频解码器。 |
video/ogg |
采用OGG多媒体文件格式的音视频文件。常用的视频解码器是Theora;音频解码器为Vorbis。 |
application/ogg |
采用OGG多媒体文件格式的音视频文件。常用的视频解码器是Theora;音频解码器为Vorbis。 |
application/json |
应用程序/json (MIME_type) https://en.wikipedia.org/wiki/Media_type#Common_examples https://www.iana.org/assignments/media-types/application/json |
多部分/表单数据
multipart/form-data
可用于HTML表单从浏览器发送信息给服务器。作为多部分不同格式,它由最终线(一个由'--'
开始的字符串)划分出的部分组成。每个部分都有自己的实体,以及自己的HTTP请求头,Content-Disposition
和Content-Type
用于文件上传领域,最常用的(Content-Length
因为你的线作为伴奏而被忽视)。
Content-Type: multipart/form-data; boundary=aBoundaryString (other headers associated with the multipart document as a whole) --aBoundaryString Content-Disposition: form-data; name="myFile"; filename="img.jpg" Content-Type: image/jpeg (data) --aBoundaryString Content-Disposition: form-data; name="myField" (data) --aBoundaryString (more subparts) --aBoundaryString--
如下所示的表格:
<form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
<input type="text" name="myTextField">
<input type="checkbox" name="myCheckBox">Check</input>
<input type="file" name="myFile">
<button>Send the file</button>
</form>
会发送这样的请求:
POST / HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498 Content-Length: 465 -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myTextField" Test -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myCheckBox" on -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myFile"; filename="test.txt" Content-Type: text/plain Simple file. -----------------------------8721656041911415653955004498--
多部分/字节范围
multipart/byteranges
用于把部分的响应报文发送回浏览器。发送当码状态时,这个MIME类型用于指出这个文件由若干部分组成,每一个都有其请求范围。其他就像很多最类型使用分隔符来制定分界线。每一个不同的部分这样的HTTP头来说明文件的实际类型,以及 来说明其范围。206
Partial Content
Content-Type
Content-Type
Content-Range
HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 385
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-200/1270
eta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="vieport" content
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 300-400/1270
-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: "Open Sans", "Helvetica
--3d6b6a416f9b5--
设置正确的 MIME 类型的还原
很多网络服务器使用默认的 application/octet-stream
来发送未知类型。出于一些安全原因,对于这些资源浏览器支持一些设置默认操作,导致用户必须存储到本地使用。常见的导致服务器配置错误的文件类型如下所示:
-
RAR 编码文件。服务器将发送
application/x-rar-compressed
作为 MIME 类型,用户不会将其定义为特殊的默认操作。 -
只有正确设置了 MIME 类型的文件才能被
<video>
或<audio>
识别和播放。可参照 使用正确的音频和视频类型。 -
关于文件类型。是文件时
application/octet-stream
允许使用。由于特殊情况需要特别注意 的:对于一般的 MIME 类型浏览器不允许定义默认行为(例如“在 Word 中打开”)
MIME嗅探
在浏览器浏览 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行 MIME 嗅探。每一个在不同的情况下会执行不同的操作。因为这个会出现一些安全问题,有的MIME类型表示可执行内容而有些是不可执行内容。器浏览可以通过请求头Content-Type
来设置 X-Content-Type-Options
以阻止MIME嗅探。
其他发送文件类型的方法
MIME类型不是传达的文档类型信息的唯一方式:
- 有时会使用后缀,特别是系统上。并不是所有的操作系统都认为这些后缀名称是微软的(是Linux和OS),而且特别像外部MIME类型一样,保证它们是正确的。
- 魔术数字。不同类型的文件的语法通过查看结构来允许文件类型推断。例如,每个GIF文件以47 49 46 38十六进制值[GIF89]或89 50 4E 47 [.PNG]的PNG文件开头并非所有类型的文件都存在幻数,所以这也不是 100%可靠的方式。