MIME 类型
轉(zhuǎn)自:?https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
多用途Internet郵件擴(kuò)展(MIME)類型?是一種標(biāo)準(zhǔn)化的方式來表示文檔的性質(zhì)和格式。 它在IETF RFC 6838中進(jìn)行了定義和標(biāo)準(zhǔn)化。互聯(lián)網(wǎng)號(hào)碼分配機(jī)構(gòu)(IANA)是負(fù)責(zé)跟蹤所有官方MIME類型的官方機(jī)構(gòu),您可以在媒體類型頁面中找到最新的完整列表。
瀏覽器通常使用MIME類型(而不是文件擴(kuò)展名)來確定如何處理文檔;因此服務(wù)器設(shè)置正確以將正確的MIME類型附加到響應(yīng)對(duì)象的頭部是非常重要的。
語法
通用結(jié)構(gòu)
type/subtypeMIME的組成結(jié)構(gòu)非常簡(jiǎn)單;由類型與子類型兩個(gè)字符串中間用'/'分隔而組成。并不允許空格存在。type?表示可以被分為復(fù)數(shù)子類的獨(dú)立類型。subtype 表示細(xì)分后的每個(gè)類型。
MIME類型對(duì)大小寫不敏感,但是傳統(tǒng)寫法都是小寫。
獨(dú)立類型
text/plain text/html image/jpeg image/png audio/mpeg audio/ogg audio/* video/mp4 application/octet-stream …獨(dú)立類型表明了對(duì)文件的分類,可以是如下之一:
| text | 表明文件是普通文本,理論上是可讀的語言 | text/plain,?text/html,?text/css, text/javascript |
| image | 表明是某種圖像。不包括視頻,但是動(dòng)態(tài)圖(比如動(dòng)態(tài)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 | 表明是某種二進(jìn)制數(shù)據(jù) | application/octet-stream,?application/pkcs12,?application/vnd.mspowerpoint,?application/xhtml+xml,?application/xml,??application/pdf, application/json |
對(duì)于text文件類型若沒有特定的subtype,就使用?text/plain。類似的,二進(jìn)制文件沒有特定或已知的 subtype,即使用?application/octet-stream。
Multipart 類型
multipart/form-data multipart/byterangesMultipart?類型表示細(xì)分領(lǐng)域的文件類型的種類,經(jīng)常對(duì)應(yīng)不同的 MIME 類型。這是復(fù)合文件的一種表現(xiàn)方式。對(duì)于?multipart/form-data?的例外部分,可以使用HTML Forms?和?POST?方法,此外?multipart/byteranges使用狀態(tài)碼206?Partial?Content來發(fā)送整個(gè)文件的子集,而HTTP不能處理的復(fù)合文件使用一個(gè)特殊的方式:將信息直接傳送給瀏覽器(這時(shí)可能會(huì)建立一個(gè)“另存為”窗口,但是卻不知道如何去顯示內(nèi)聯(lián)文件。)
重要的MIME類型
application/octet-stream
這是應(yīng)用程序文件的默認(rèn)值。意思是?未知的應(yīng)用程序文件 ,瀏覽器一般不會(huì)自動(dòng)執(zhí)行或詢問執(zhí)行。瀏覽器會(huì)像對(duì)待 設(shè)置了HTTP頭Content-Disposition?值為“附件”的文件一樣來對(duì)待這類文件。
text/plain
文本文件默認(rèn)值。意思是?未知的文本文件?,瀏覽器認(rèn)為是可以直接展示的。
text/plain并不是意味著某種文本數(shù)據(jù)。如果瀏覽器想要一個(gè)文本文件的明確類型,瀏覽器并不會(huì)考慮他們是否匹配。比如說,如果通過一個(gè)表明是下載CSS文件的<link>鏈接下載了一個(gè)?text/plain?文件。如果提供的信息是text/plain,瀏覽器并不會(huì)認(rèn)出這是有效的CSS文件。CSS類型需要使用text/css。
text/css
任何一個(gè)CSS文件想要在網(wǎng)頁上被解釋執(zhí)行就必須為text/css 文件。但是服務(wù)器經(jīng)常不會(huì)分辨出使用.css后綴的CSS文件,并且將其MIME類型設(shè)置為text/plain?或?application/octet-stream?發(fā)送:在這種情況下,文件并不能被瀏覽器識(shí)別為CSS文件并且會(huì)被直接忽略。所以特別注意要給CSS文件設(shè)置正確的類型。
text/html
所有的HTML內(nèi)容都應(yīng)該使用這種類型。XHTML的其他MIME類型(如application/xml+html)現(xiàn)在基本不再使用(HTML5統(tǒng)一了這些格式)。
圖片類型
圖片類型是在網(wǎng)頁中使用的,唯一被廣泛識(shí)別以及考慮過web安全的類型:
| image/gif | GIF 圖片 (無損耗壓縮方面被PNG所替代) |
| image/jpeg | JPEG 圖片 |
| image/png | PNG 圖片 |
| image/svg+xml | SVG圖片 (矢量圖) |
此處的類型劃分有一定的爭(zhēng)議,有人認(rèn)為此處應(yīng)該增加?WebP(image/webp),但是每個(gè)新增的圖片類型都會(huì)增加代碼的數(shù)量,這會(huì)帶來一些新的安全問題,所以瀏覽器供應(yīng)商對(duì)于添加類型非常小心。
另外的一些圖片種類可以在Web文檔中找到。比如很多瀏覽器支持?icon 類型的圖標(biāo)作為?favicons或者類似的圖標(biāo),并且瀏覽器在MIME類型中的?image/x-icon?支持ICO圖像。
音頻與視頻類型
HTML并沒有明確定義被用于<audio>和<video>元素所支持的文件類型,所以在web上使用的只有相對(duì)較小的一組類型。??Media formats supported by the HTML audio and video elements?這篇文章解釋了可以被使用的解碼器或視頻文件格式。
在web環(huán)境最常用的視頻文件的格式,是以下這些這些文件類型:
| 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 是這個(gè)多媒體文件格式最常用的音頻解碼器。 |
| 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表單從瀏覽器發(fā)送信息給服務(wù)器。作為多部分文檔格式,它由邊界線(一個(gè)由'--'開始的字符串)劃分出的不同部分組成。每一部分有自己的實(shí)體,以及自己的 HTTP 請(qǐng)求頭,Content-Disposition和?Content-Type?用于文件上傳領(lǐng)域,最常用的?(Content-Length?因?yàn)檫吔缇€作為分隔符而被忽略)。
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>會(huì)發(fā)送這樣的請(qǐng)求:
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/plainSimple file. -----------------------------8721656041911415653955004498--multipart/byteranges
multipart/byteranges?用于把部分的響應(yīng)報(bào)文發(fā)送回瀏覽器。當(dāng)發(fā)送狀態(tài)碼206Partial Content時(shí),這個(gè)MIME類型用于指出這個(gè)文件由若干部分組成,每一個(gè)都有其請(qǐng)求范圍。就像其他很多類型Content-Type使用分隔符來制定分界線。每一個(gè)不同的部分都有Content-Type這樣的HTTP頭來說明文件的實(shí)際類型,以及?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/1270eta 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--設(shè)置正確的MIME類型的重要性
很多web服務(wù)器使用默認(rèn)的?application/octet-stream?來發(fā)送未知類型。出于一些安全原因,對(duì)于這些資源瀏覽器不允許設(shè)置一些自定義默認(rèn)操作,導(dǎo)致用戶必須存儲(chǔ)到本地以使用。常見的導(dǎo)致服務(wù)器配置錯(cuò)誤的文件類型如下所示:
-
RAR編碼文件。在這種情況,理想狀態(tài)是,設(shè)置真實(shí)的編碼文件類型;但這通常不可能(可能是服務(wù)器所未知的類型或者這個(gè)文件包含許多其他的不同的文件類型)。這這種情況服務(wù)器將發(fā)送?application/x-rar-compressed?作為MIME類型,用戶不會(huì)將其定義為有用的默認(rèn)操作。
-
音頻或視頻文件。只有正確設(shè)置了MIME類型的文件才能被?<video>?或<audio>?識(shí)別和播放。?可參照 ?use the correct type for audio and video。
-
專有文件類型。是專有文件時(shí)需要特別注意。使用?application/octet-stream?作為特殊處理是不被允許的:對(duì)于一般的MIME類型瀏覽器不允許定義默認(rèn)行為(比如“在Word中打開”)
MIME 嗅探
在缺失 MIME 類型或客戶端認(rèn)為文件設(shè)置了錯(cuò)誤的 MIME 類型時(shí),瀏覽器可能會(huì)通過查看資源來進(jìn)行MIME嗅探。每一個(gè)瀏覽器在不同的情況下會(huì)執(zhí)行不同的操作。因?yàn)檫@個(gè)操作會(huì)有一些安全問題,有的 MIME 類型表示可執(zhí)行內(nèi)容而有些是不可執(zhí)行內(nèi)容。瀏覽器可以通過請(qǐng)求頭?Content-Type?來設(shè)置?X-Content-Type-Options?以阻止MIME嗅探。
其他傳送文件類型的方法
MIME類型不是傳達(dá)文檔類型信息的唯一方式:
- 有時(shí)會(huì)使用名稱后綴,特別是在Microsoft Windows系統(tǒng)上。并非所有的操作系統(tǒng)都認(rèn)為這些后綴是有意義的(特別是Linux和Mac OS),并且像外部MIME類型一樣,不能保證它們是正確的。
- 魔術(shù)數(shù)字。不同類型的文件的語法通過查看結(jié)構(gòu)來允許文件類型推斷。例如,每個(gè)GIF文件以47 49 46 38十六進(jìn)制值[GIF89]或89 50 4E 47 [.PNG]的PNG文件開頭。 并非所有類型的文件都有幻數(shù),所以這也不是100%可靠的方式。
其他
- Properly configuring server MIME types
-
Media formats supported by the HTML audio and video elements
-
https://www.iana.org/assignments/media-types/application/json
總結(jié)
- 上一篇: dedecms怎么打开(dedecms使
- 下一篇: 完整的MIME类型列表