MIME 类型

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/plaintext/html,text/css, text/javascript
image 不包括视频,但动态图(例如动态gif)也使用图像类型 image/gifimage/pngimage/jpegimage/bmpimage/webpimage/x-icon,image/vnd.microsoft.icon
audio 毫无疑问是你自己的文件 audio/midiaudio/mpeg, audio/webm, audio/ogg, audio/wav
video 毫无征兆的视频文件 video/webmvideo/ogg
application 无可否认的数据

application/octet-streamapplication/pkcs12application/vnd.mspowerpointapplication/xhtml+xmlapplication/xml,  application/pdf

文本文件类型如果没有特定的子类型,就使用 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/xmlapplication/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-DispositionContent-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头来说明文件的实际类型,以及 来说明其范围。206Partial ContentContent-TypeContent-TypeContent-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%可靠的方式。
上一篇:【干货】微信场景之H5页面制作免费工具大集合


下一篇:SpringBoot系列(二)配置文件