MIME 類型

MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的因特網標準。 javascript

MIME 消息能包含文本、圖像、音頻、視頻以及其餘應用程序專用的數據。 css

按照文件擴展名排列的 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
pdf 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類型的官方機構,您能夠在媒體類型頁面中找到最新的完整列表。html

瀏覽器一般使用MIME類型(而不是文件擴展名)來肯定如何處理文檔;所以服務器設置正確以將正確的MIME類型附加到響應對象的頭部是很是重要的。java

語法

通用結構

type/subtype

MIME的組成結構很是簡單;由類型與子類型兩個字符串中間用'/'分隔而組成。並不容許空格存在。type 表示能夠被分爲複數子類的獨立類型。subtype 表示細分後的每一個類型。web

MIME類型對大小寫不敏感,可是傳統寫法都是小寫。json

獨立類型

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 代表是某種二進制數據

application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xmlapplication/pdf,安全

application/json服務器

對於text文件類型若沒有特定的subtype,就使用 text/plain。相似的,二進制文件沒有特定或已知的 subtype,即便用 application/octet-streamapp

Multipart 類型

multipart/form-data
multipart/byteranges

Multipart 類型表示細分領域的文件類型的種類,常常對應不一樣的 MIME 類型。這是複合文件的一種表現方式。對於 multipart/form-data 的例外部分,可使用HTML FormsPOST 方法,此外 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/plainapplication/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/wave
audio/wav
audio/x-wav
audio/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-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

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%可靠的方式。

其餘

相關文章
相關標籤/搜索