MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的因特網標准。
MIME 消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據。
按照文件擴展名排列的 Mime 類型列表
| 擴展名 | 類型/子類型 |
|---|---|
| application/octet-stream | |
| 323 | text/h323 |
| acx | application/internet-property-stream |
| ai | application/postscript |
| aif | audio/x-aiff |
| aifc | audio/x-aiff |
| aiff | audio/x-aiff |
| asf | video/x-ms-asf |
| asr | video/x-ms-asf |
| asx | video/x-ms-asf |
| au | audio/basic |
| avi | video/x-msvideo |
| axs | application/olescript |
| bas | text/plain |
| bcpio | application/x-bcpio |
| bin | application/octet-stream |
| bmp | image/bmp |
| c | text/plain |
| cat | application/vnd.ms-pkiseccat |
| cdf | application/x-cdf |
| cer | application/x-x509-ca-cert |
| class | application/octet-stream |
| clp | application/x-msclip |
| cmx | image/x-cmx |
| cod | image/cis-cod |
| cpio | application/x-cpio |
| crd | application/x-mscardfile |
| crl | application/pkix-crl |
| crt | application/x-x509-ca-cert |
| csh | application/x-csh |
| css | text/css |
| dcr | application/x-director |
| der | application/x-x509-ca-cert |
| dir | application/x-director |
| dll | application/x-msdownload |
| dms | application/octet-stream |
| doc | application/msword |
| dot | application/msword |
| dvi | application/x-dvi |
| dxr | application/x-director |
| eps | application/postscript |
| etx | text/x-setext |
| evy | application/envoy |
| exe | application/octet-stream |
| fif | application/fractals |
| flr | x-world/x-vrml |
| gif | image/gif |
| gtar | application/x-gtar |
| gz | application/x-gzip |
| h | text/plain |
| hdf | application/x-hdf |
| hlp | application/winhlp |
| hqx | application/mac-binhex40 |
| hta | application/hta |
| htc | text/x-component |
| htm | text/html |
| html | text/html |
| htt | text/webviewhtml |
| ico | image/x-icon |
| ief | image/ief |
| iii | application/x-iphone |
| ins | application/x-internet-signup |
| isp | application/x-internet-signup |
| jfif | image/pipeg |
| jpe | image/jpeg |
| jpeg | image/jpeg |
| jpg | image/jpeg |
| js | application/x-javascript |
| latex | application/x-latex |
| lha | application/octet-stream |
| lsf | video/x-la-asf |
| lsx | video/x-la-asf |
| lzh | application/octet-stream |
| m13 | application/x-msmediaview |
| m14 | application/x-msmediaview |
| m3u | audio/x-mpegurl |
| man | application/x-troff-man |
| mdb | application/x-msaccess |
| me | application/x-troff-me |
| mht | message/rfc822 |
| mhtml | message/rfc822 |
| mid | audio/mid |
| mny | application/x-msmoney |
| mov | video/quicktime |
| movie | video/x-sgi-movie |
| mp2 | video/mpeg |
| mp3 | audio/mpeg |
| mpa | video/mpeg |
| mpe | video/mpeg |
| mpeg | video/mpeg |
| mpg | video/mpeg |
| mpp | application/vnd.ms-project |
| mpv2 | video/mpeg |
| ms | application/x-troff-ms |
| mvb | application/x-msmediaview |
| nws | message/rfc822 |
| oda | application/oda |
| p10 | application/pkcs10 |
| p12 | application/x-pkcs12 |
| p7b | application/x-pkcs7-certificates |
| p7c | application/x-pkcs7-mime |
| p7m | application/x-pkcs7-mime |
| p7r | application/x-pkcs7-certreqresp |
| p7s | application/x-pkcs7-signature |
| pbm | image/x-portable-bitmap |
| application/pdf | |
| pfx | application/x-pkcs12 |
| pgm | image/x-portable-graymap |
| pko | application/ynd.ms-pkipko |
| pma | application/x-perfmon |
| pmc | application/x-perfmon |
| pml | application/x-perfmon |
| pmr | application/x-perfmon |
| pmw | application/x-perfmon |
| pnm | image/x-portable-anymap |
| pot, | application/vnd.ms-powerpoint |
| ppm | image/x-portable-pixmap |
| pps | application/vnd.ms-powerpoint |
| ppt | application/vnd.ms-powerpoint |
| prf | application/pics-rules |
| ps | application/postscript |
| pub | application/x-mspublisher |
| qt | video/quicktime |
| ra | audio/x-pn-realaudio |
| ram | audio/x-pn-realaudio |
| ras | image/x-cmu-raster |
| rgb | image/x-rgb |
| rmi | audio/mid |
| roff | application/x-troff |
| rtf | application/rtf |
| rtx | text/richtext |
| scd | application/x-msschedule |
| sct | text/scriptlet |
| setpay | application/set-payment-initiation |
| setreg | application/set-registration-initiation |
| sh | application/x-sh |
| shar | application/x-shar |
| sit | application/x-stuffit |
| snd | audio/basic |
| spc | application/x-pkcs7-certificates |
| spl | application/futuresplash |
| src | application/x-wais-source |
| sst | application/vnd.ms-pkicertstore |
| stl | application/vnd.ms-pkistl |
| stm | text/html |
| svg | image/svg+xml |
| sv4cpio | application/x-sv4cpio |
| sv4crc | application/x-sv4crc |
| swf | application/x-shockwave-flash |
| t | application/x-troff |
| tar | application/x-tar |
| tcl | application/x-tcl |
| tex | application/x-tex |
| texi | application/x-texinfo |
| texinfo | application/x-texinfo |
| tgz | application/x-compressed |
| tif | image/tiff |
| tiff | image/tiff |
| tr | application/x-troff |
| trm | application/x-msterminal |
| tsv | text/tab-separated-values |
| txt | text/plain |
| uls | text/iuls |
| ustar | application/x-ustar |
| vcf | text/x-vcard |
| vrml | x-world/x-vrml |
| wav | audio/x-wav |
| wcm | application/vnd.ms-works |
| wdb | application/vnd.ms-works |
| wks | application/vnd.ms-works |
| wmf | application/x-msmetafile |
| wps | application/vnd.ms-works |
| wri | application/x-mswrite |
| wrl | x-world/x-vrml |
| wrz | x-world/x-vrml |
| xaf | x-world/x-vrml |
| xbm | image/x-xbitmap |
| xla | application/vnd.ms-excel |
| xlc | application/vnd.ms-excel |
| xlm | application/vnd.ms-excel |
| xls | application/vnd.ms-excel |
| xlt | application/vnd.ms-excel |
| xlw | application/vnd.ms-excel |
| xof | x-world/x-vrml |
| xpm | image/x-xpixmap |
| xwd | image/x-xwindowdump |
| z | application/x-compress |
| zip | application/zip |
多用途Internet郵件擴展(MIME)類型 是一種標准化的方式來表示文檔的性質和格式。 它在IETF RFC 6838中進行了定義和標准化。互聯網號碼分配機構(IANA)是負責跟蹤所有官方MIME類型的官方機構,您可以在媒體類型頁面中找到最新的完整列表。
瀏覽器通常使用MIME類型(而不是文件擴展名)來確定如何處理文檔;因此服務器設置正確以將正確的MIME類型附加到響應對象的頭部是非常重要的。
語法
通用結構
type/subtype
MIME的組成結構非常簡單;由類型與子類型兩個字符串中間用'/'分隔而組成。並不允許空格存在。type 表示可以被分為復數子類的獨立類型。subtype 表示細分后的每個類型。
MIME類型對大小寫不敏感,但是傳統寫法都是小寫。
獨立類型
text/plain text/html image/jpeg image/png audio/mpeg audio/ogg audio/* video/mp4 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 |
audio |
表明是某種音頻文件 | audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav |
video |
表明是某種視頻文件 | video/webm, video/ogg |
application |
表明是某種二進制數據 |
|
對於text文件類型若沒有特定的subtype,就使用 text/plain。類似的,二進制文件沒有特定或已知的 subtype,即使用 application/octet-stream。
Multipart 類型
multipart/form-data multipart/byteranges
Multipart 類型表示細分領域的文件類型的種類,經常對應不同的 MIME 類型。這是復合文件的一種表現方式。對於 multipart/form-data 的例外部分,可以使用HTML Forms 和 POST 方法,此外 multipart/byteranges使用狀態碼206 Partial Content來發送整個文件的子集,而HTTP不能處理的復合文件使用一個特殊的方式:將信息直接傳送給瀏覽器(這時可能會建立一個“另存為”窗口,但是卻不知道如何去顯示內聯文件。)
重要的MIME類型
application/octet-stream
這是應用程序文件的默認值。意思是 未知的應用程序文件 ,瀏覽器一般不會自動執行或詢問執行。瀏覽器會像對待 設置了HTTP頭Content-Disposition 值為“附件”的文件一樣來對待這類文件。
text/plain
文本文件默認值。意思是 未知的文本文件 ,瀏覽器認為是可以直接展示的。
text/plain並不是意味着某種文本數據。如果瀏覽器想要一個文本文件的明確類型,瀏覽器並不會考慮他們是否匹配。比如說,如果通過一個表明是下載CSS文件的<link>鏈接下載了一個 text/plain 文件。如果提供的信息是text/plain,瀏覽器並不會認出這是有效的CSS文件。CSS類型需要使用text/css。
text/css
任何一個CSS文件想要在網頁上被解釋執行就必須為text/css 文件。但是服務器經常不會分辨出使用.css后綴的CSS文件,並且將其MIME類型設置為text/plain 或 application/octet-stream 發送:在這種情況下,文件並不能被瀏覽器識別為CSS文件並且會被直接忽略。所以特別注意要給CSS文件設置正確的類型。
text/html
所有的HTML內容都應該使用這種類型。XHTML的其他MIME類型(如application/xml+html)現在基本不再使用(HTML5統一了這些格式)。
圖片類型
圖片類型是在網頁中使用的,唯一被廣泛識別以及考慮過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圖像。
音頻與視頻類型
HTML並沒有明確定義被用於<audio>和<video>元素所支持的文件類型,所以在web上使用的只有相對較小的一組類型。 Media formats supported by the HTML audio and video elements 這篇文章解釋了可以被使用的解碼器或視頻文件格式。
在web環境最常用的視頻文件的格式,是以下這些這些文件類型:
| MIME 類型 | 音頻或視頻類型 |
|---|---|
audio/waveaudio/wavaudio/x-wavaudio/x-pn-wav |
音頻流媒體文件。一般支持PCM音頻編碼,其他解碼器有限支持(如果有的話)。 |
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) https://en.wikipedia.org/wiki/Media_type#Common_examples https://www.iana.org/assignments/media-types/application/json |
multipart/form-data
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
multipart/byteranges 用於把部分的響應報文發送回瀏覽器。當發送狀態碼206Partial 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--
設置正確的MIME類型的重要性
很多web服務器使用默認的 application/octet-stream 來發送未知類型。出於一些安全原因,對於這些資源瀏覽器不允許設置一些自定義默認操作,導致用戶必須存儲到本地以使用。常見的導致服務器配置錯誤的文件類型如下所示:
-
RAR編碼文件。在這種情況,理想狀態是,設置真實的編碼文件類型;但這通常不可能(可能是服務器所未知的類型或者這個文件包含許多其他的不同的文件類型)。這這種情況服務器將發送
application/x-rar-compressed作為MIME類型,用戶不會將其定義為有用的默認操作。 -
音頻或視頻文件。只有正確設置了MIME類型的文件才能被
<video>或<audio>識別和播放。 可參照 use the correct type for audio and video。 -
專有文件類型。是專有文件時需要特別注意。使用
application/octet-stream作為特殊處理是不被允許的:對於一般的MIME類型瀏覽器不允許定義默認行為(比如“在Word中打開”)
MIME 嗅探
在缺失 MIME 類型或客戶端認為文件設置了錯誤的 MIME 類型時,瀏覽器可能會通過查看資源來進行MIME嗅探。每一個瀏覽器在不同的情況下會執行不同的操作。因為這個操作會有一些安全問題,有的 MIME 類型表示可執行內容而有些是不可執行內容。瀏覽器可以通過請求頭 Content-Type 來設置 X-Content-Type-Options 以阻止MIME嗅探。
其他傳送文件類型的方法
MIME類型不是傳達文檔類型信息的唯一方式:
- 有時會使用名稱后綴,特別是在Microsoft Windows系統上。並非所有的操作系統都認為這些后綴是有意義的(特別是Linux和Mac OS),並且像外部MIME類型一樣,不能保證它們是正確的。
- 魔術數字。不同類型的文件的語法通過查看結構來允許文件類型推斷。例如,每個GIF文件以47 49 46 38十六進制值[GIF89]或89 50 4E 47 [.PNG]的PNG文件開頭。 並非所有類型的文件都有幻數,所以這也不是100%可靠的方式。
