【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107746738javascript
多用途Internet邮件扩展(MIME)类型 是一种标准化的方式来表示文档的性质和格式。 它在IETF RFC 6838中进行了定义和标准化。互联网号码分配机构(IANA)是负责跟踪全部官方MIME类型的官方机构,您能够在媒体类型页面中找到最新的完整列表。css
浏览器一般使用MIME类型(而不是文件扩展名)来肯定如何处理文档;所以服务器设置正确以将正确的MIME类型附加到响应对象的头部是很是重要的。html
type/subtype
MIME的组成结构很是简单;由类型与子类型两个字符串中间用'/'
分隔而组成。不容许空格存在。type 表示能够被分多个子类的独立类别。subtype 表示细分后的每一个类型。java
MIME类型对大小写不敏感,可是传统写法都是小写。web
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类型 | 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 |
代表是某种二进制数据 | application/octet-stream , application/pkcs12 , application/vnd.mspowerpoint , application/xhtml+xml , application/xml , application/pdf |
对于text文件类型若没有特定的subtype,就使用 text/plain
。相似的,二进制文件没有特定或已知的 subtype,即便用 application/octet-stream
。json
multipart/form-data
multipart/byteranges
Multipart 类型表示细分领域的文件类型的种类,常常对应不一样的 MIME 类型。这是复合文件的一种表现方式。multipart/form-data
可用于联系HTML Forms
和 POST
方法,此外 multipart/byteranges
使用状态码206
Partial Content
来发送整个文件的子集,而HTTP对不能处理的复合文件使用特殊的方式:将信息直接传送给浏览器(这时可能会创建一个“另存为”窗口,可是殊不知道如何去显示内联文件。)后端
这是应用程序文件的默认值。意思是 未知的应用程序文件 ,浏览器通常不会自动执行或询问执行。浏览器会像对待 设置了HTTP头Content-Disposition值为 attachment
的文件同样来对待这类文件。
在multipart/form-data
类型的应答消息体中,Content-Disposition
消息头能够被用在multipart
消息体的子部分中,用来给出其对应字段的相关信息。各个子部分由在Content-Type
中定义的分隔符分隔。用在消息体自身则无实际意义。浏览器
文本文件默认值。即便它意味着未知的文本文件,但浏览器认为是能够直接展现的。text/plain
并非意味着某种文本数据。若是浏览器想要一个文本文件的明确类型,浏览器并不会考虑他们是否匹配。好比说,若是经过一个代表是下载CSS文件的<link>
连接下载了一个 text/plain
文件。若是提供的信息是text/plain,浏览器并不会认出这是有效的CSS文件。CSS类型须要使用text/css。安全
在网页中要被解析为CSS的任何CSS文件必须指定MIME为text/css
。一般,服务器不识别以.css为后缀的文件的MIME类型,而是将其以MIME为text/plain
或 application/octet-stream
来发送给浏览器:在这种状况下,大多数浏览器不识别其为CSS文件,直接忽略掉。特别要注意为CSS文件提供正确的MIME类型。
全部的HTML内容都应该使用这种类型。XHTML的其余MIME类型(如application/xml+html
)如今基本再也不使用(HTML5统一了这些格式)。
Note: You still need to useapplication/xml
orapplication/xhtml+xml
if you intend to make use of XML’s strict parsing rules, use[<![CDATA[…]]>]
or elements from non‑HTML, non‑SVG or non‑MathML XML namespaces, astext/html
’s parsing semantics are subtly incompatible with those ofapplication/xml
.
据 MIME 嗅探标准,下面是有效的 JavaScript MIME 类型
application/javascript
application/ecmascript
application/x-ecmascript
application/x-javascript
text/ecmascript
text/javascript
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 类型已经被 RFC 4329 废弃。
只有一小部分图片类型是被普遍支持的,Web安全的,可随时在Web页面中使用的:
MIME 类型 | 图片类型 |
---|---|
image/gif |
GIF 图片 (无损耗压缩方面被PNG所替代) |
image/jpeg |
JPEG 图片 |
image/png |
PNG 图片 |
image/svg+xml |
SVG图片 (矢量图) |
此处的类型划分有必定的争议,有人认为此处应该增长 WebP(image/webp
),可是每一个新增的图片类型都会增长代码的数量,这会带来一些新的安全问题,因此浏览器供应商对于添加类型很是当心。
另外的一些图片种类能够在Web文档中找到。好比不少浏览器支持 icon 类型的图标做为 favicons或者相似的图标,而且浏览器在MIME类型中的 image/x-icon
支持ICO图像
尽管image/vnd.microsoft.icon
在ANA注册, 它仍然不被普遍支持,image/x-icon
被做为替代品使用。
HTML并无明肯定义被用于<audio>
和<video>
元素所支持的文件类型,因此在web上使用的只有相对较小的一组类型。文章 Media formats supported by the HTML audio and video elements 解释了能够被使用的解码器或视频文件格式。
在web环境最经常使用的视频文件的格式,是如下这些这些文件类型:
MIME 类型 | 音频或视频类型 |
---|---|
audio/wave <br/> audio/wav <br/> audio/x-wav <br/> audio/x-pn-wav |
音频流媒体文件。通常支持PCM音频编码 (WAVE codec "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 |
application/json (MIME_type) <br/>https://en.wikipedia.org/wiki/Media_type#Common_examples <br/> 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
用于把部分的响应报文发送回浏览器。当发送状态码206
Partial Content
时,这个MIME类型用于指出这个文件由若干部分组成,每个都有其请求范围。就像其余不少类型Content-Type
使用分隔符来制定分界线。每个不一样的部分都有Content-Type
这样的HTTP头来讲明文件的实际类型,以及 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--
不少web服务器使用默认的 application/octet-stream
来发送未知类型。出于一些安全缘由,对于这些资源浏览器不容许设置一些自定义默认操做,致使用户必须存储到本地以使用。常见的致使服务器配置错误的文件类型以下所示:
application/x-rar-compressed
做为MIME类型,用户不会将其定义为有用的默认操做。<video>
或`<audio>识别和播放。 可参照 use the correct type for audio and video。application/octet-stream
做为特殊处理是不被容许的:对于通常的MIME类型浏览器不容许定义默认行为(好比“在Word中打开”)在缺失 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会经过查看资源来进行MIME嗅探。每个浏览器在不一样的状况下会执行不一样的操做。由于这个操做会有一些安全问题,有的 MIME 类型表示可执行内容而有些是不可执行内容。浏览器能够经过请求头 Content-Type
来设置 X-Content-Type-Options
以阻止MIME嗅探。
MIME类型不是传达文档类型信息的惟一方式:
欢迎关注 “后端老鸟” 公众号,接下来会发一系列的专题文章,包括Java、Python、Linux、SpringBoot、SpringCloud、Dubbo、算法、技术团队的管理等,还有各类脑图和学习资料,NFC技术、搜索技术、爬虫技术、推荐技术、音视频互动直播等,只要有时间我就会整理分享,敬请期待,现成的笔记、脑图和学习资料若是你们有需求也能够公众号留言提早获取。因为本人在全部团队中基本都处于攻坚和探路的角色,搞过的东西多,遇到的坑多,解决的问题也不少,欢迎你们加公众号进群一块儿交流学习。
【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107746738