MIME 類型大全,你值得收藏

【轉(zhuǎn)載請(qǐng)注明出處】:https://blog.csdn.net/huahao1989/article/details/107746738

多用途Internet郵件擴(kuò)展(MIME)類型 是一種標(biāo)準(zhǔn)化的方式來(lái)表示文檔的性質(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),您可以在媒體類型頁(yè)面中找到最新的完整列表。

瀏覽器通常使用MIME類型(而不是文件擴(kuò)展名)來(lái)確定如何處理文檔;因此服務(wù)器設(shè)置正確以將正確的MIME類型附加到響應(yīng)對(duì)象的頭部是非常重要的。

語(yǔ)法

通用結(jié)構(gòu)

type/subtype

MIME的組成結(jié)構(gòu)非常簡(jiǎn)單;由類型與子類型兩個(gè)字符串中間用'/'分隔而組成。不允許空格存在。type 表示可以被分多個(gè)子類的獨(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/*
application/json
application/javascript
application/ecmascript
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, image/x-icon, image/vnd.microsoft.icon
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

對(duì)于text文件類型若沒有特定的subtype,就使用 text/plain。類似的,二進(jìn)制文件沒有特定或已知的 subtype,即使用 application/octet-stream。

Multipart 類型

multipart/form-data
multipart/byteranges

Multipart 類型表示細(xì)分領(lǐng)域的文件類型的種類,經(jīng)常對(duì)應(yīng)不同的 MIME 類型。這是復(fù)合文件的一種表現(xiàn)方式。multipart/form-data 可用于聯(lián)系HTML FormsPOST方法,此外 multipart/byteranges使用狀態(tài)碼206 Partial Content來(lái)發(fā)送整個(gè)文件的子集,而HTTP對(duì)不能處理的復(fù)合文件使用特殊的方式:將信息直接傳送給瀏覽器(這時(shí)可能會(huì)建立一個(gè)“另存為”窗口,但是卻不知道如何去顯示內(nèi)聯(lián)文件。)

重要的MIME類型
  • application/octet-stream
    這是應(yīng)用程序文件的默認(rèn)值。意思是 未知的應(yīng)用程序文件 ,瀏覽器一般不會(huì)自動(dòng)執(zhí)行或詢問(wèn)執(zhí)行。瀏覽器會(huì)像對(duì)待 設(shè)置了HTTP頭Content-Disposition值為 attachment 的文件一樣來(lái)對(duì)待這類文件。
    multipart/form-data類型的應(yīng)答消息體中,Content-Disposition消息頭可以被用在multipart消息體的子部分中,用來(lái)給出其對(duì)應(yīng)字段的相關(guān)信息。各個(gè)子部分由在Content-Type中定義的分隔符分隔。用在消息體自身則無(wú)實(shí)際意義。

  • text/plain
    文本文件默認(rèn)值。即使它意味著未知的文本文件,但瀏覽器認(rèn)為是可以直接展示的。
    text/plain并不是意味著某種文本數(shù)據(jù)。如果瀏覽器想要一個(gè)文本文件的明確類型,瀏覽器并不會(huì)考慮他們是否匹配。比如說(shuō),如果通過(guò)一個(gè)表明是下載CSS文件的<link>鏈接下載了一個(gè) text/plain 文件。如果提供的信息是text/plain,瀏覽器并不會(huì)認(rèn)出這是有效的CSS文件。CSS類型需要使用text/css。

  • text/css
    在網(wǎng)頁(yè)中要被解析為CSS的任何CSS文件必須指定MIME為text/css。通常,服務(wù)器不識(shí)別以.css為后綴的文件的MIME類型,而是將其以MIME為text/plainapplication/octet-stream 來(lái)發(fā)送給瀏覽器:在這種情況下,大多數(shù)瀏覽器不識(shí)別其為CSS文件,直接忽略掉。特別要注意為CSS文件提供正確的MIME類型。

  • text/html
    所有的HTML內(nèi)容都應(yīng)該使用這種類型。XHTML的其他MIME類型(如application/xml+html)現(xiàn)在基本不再使用(HTML5統(tǒng)一了這些格式)。

Note: You still need to use application/xml or application/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, as text/html’s parsing semantics are subtly incompatible with those of application/xml.

  • JavaScript types
    據(jù) MIME 嗅探標(biāo)準(zhǔn),下面是有效的 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 類型已經(jīng)被 RFC 4329 廢棄。

圖片類型

只有一小部分圖片類型是被廣泛支持的,Web安全的,可隨時(shí)在Web頁(yè)面中使用的:

MIME 類型 圖片類型
image/gif GIF 圖片 (無(wú)損耗壓縮方面被PNG所替代)
image/jpeg JPEG 圖片
image/png PNG 圖片
image/svg+xml SVG圖片 (矢量圖)

此處的類型劃分有一定的爭(zhēng)議,有人認(rèn)為此處應(yīng)該增加 WebP(image/webp),但是每個(gè)新增的圖片類型都會(huì)增加代碼的數(shù)量,這會(huì)帶來(lái)一些新的安全問(wèn)題,所以瀏覽器供應(yīng)商對(duì)于添加類型非常小心。

另外的一些圖片種類可以在Web文檔中找到。比如很多瀏覽器支持 icon 類型的圖標(biāo)作為 favicons或者類似的圖標(biāo),并且瀏覽器在MIME類型中的 image/x-icon 支持ICO圖像

盡管 image/vnd.microsoft.icon 在ANA注冊(cè), 它仍然不被廣泛支持,image/x-icon 被作為替代品使用。

音頻與視頻類型

HTML并沒有明確定義被用于<audio><video>元素所支持的文件類型,所以在web上使用的只有相對(duì)較小的一組類型。文章 Media formats supported by the HTML audio and video elements 解釋了可以被使用的解碼器或視頻文件格式。

在web環(huán)境最常用的視頻文件的格式,是以下這些這些文件類型:

MIME 類型 音頻或視頻類型
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav
音頻流媒體文件。一般支持PCM音頻編碼 (WAVE codec "1") ,其他解碼器有限支持(如果有的話)。
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-DispositionContent-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/plain

Simple file.
-----------------------------8721656041911415653955004498--
multipart/byteranges

multipart/byteranges 用于把部分的響應(yīng)報(bào)文發(fā)送回瀏覽器。當(dāng)發(fā)送狀態(tài)碼206 Partial Content 時(shí),這個(gè)MIME類型用于指出這個(gè)文件由若干部分組成,每一個(gè)都有其請(qǐng)求范圍。就像其他很多類型Content-Type使用分隔符來(lái)制定分界線。每一個(gè)不同的部分都有Content-Type這樣的HTTP頭來(lái)說(shuō)明文件的實(shí)際類型,以及 Content-Range來(lái)說(shuō)明其范圍。

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--

設(shè)置正確的MIME類型的重要性

很多web服務(wù)器使用默認(rèn)的 application/octet-stream 來(lái)發(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ì)通過(guò)查看資源來(lái)進(jìn)行MIME嗅探。每一個(gè)瀏覽器在不同的情況下會(huì)執(zhí)行不同的操作。因?yàn)檫@個(gè)操作會(huì)有一些安全問(wèn)題,有的 MIME 類型表示可執(zhí)行內(nèi)容而有些是不可執(zhí)行內(nèi)容。瀏覽器可以通過(guò)請(qǐng)求頭 Content-Type來(lái)設(shè)置 X-Content-Type-Options以阻止MIME嗅探。

其他傳送文件類型的方法

MIME類型不是傳達(dá)文檔類型信息的唯一方式:

  • 有時(shí)會(huì)使用名稱后綴,特別是在Microsoft Windows系統(tǒng)上。并非所有的操作系統(tǒng)都認(rèn)為這些后綴是有意義的(特別是Linux和Mac OS),并且像外部MIME類型一樣,不能保證它們是正確的。
  • 魔術(shù)數(shù)字。不同類型的文件的語(yǔ)法通過(guò)查看結(jié)構(gòu)來(lái)允許文件類型推斷。例如,每個(gè)GIF文件以47 49 46 38十六進(jìn)制值[GIF89]或89 50 4E 47 [.PNG]的PNG文件開頭。 并非所有類型的文件都有幻數(shù),所以這也不是100%可靠的方式。

其他

歡迎關(guān)注 “后端老鳥” 公眾號(hào),接下來(lái)會(huì)發(fā)一系列的專題文章,包括Java、Python、Linux、SpringBoot、SpringCloud、Dubbo、算法、技術(shù)團(tuán)隊(duì)的管理等,還有各種腦圖和學(xué)習(xí)資料,NFC技術(shù)、搜索技術(shù)、爬蟲技術(shù)、推薦技術(shù)、音視頻互動(dòng)直播等,只要有時(shí)間我就會(huì)整理分享,敬請(qǐng)期待,現(xiàn)成的筆記、腦圖和學(xué)習(xí)資料如果大家有需求也可以公眾號(hào)留言提前獲取。由于本人在所有團(tuán)隊(duì)中基本都處于攻堅(jiān)和探路的角色,搞過(guò)的東西多,遇到的坑多,解決的問(wèn)題也很多,歡迎大家加公眾號(hào)進(jìn)群一起交流學(xué)習(xí)。

【轉(zhuǎn)載請(qǐng)注明出處】:https://blog.csdn.net/huahao1989/article/details/107746738

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容