【轉載請註明出處】: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