MIME 類型大全,你值得收藏

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

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值爲 attachment 的文件同樣來對待這類文件。
multipart/form-data類型的應答消息體中,Content-Disposition消息頭能夠被用在multipart消息體的子部分中,用來給出其對應字段的相關信息。各個子部分由在Content-Type中定義的分隔符分隔。用在消息體自身則無實際意義。瀏覽器

  • text/plain

文本文件默認值。即便它意味着未知的文本文件,但瀏覽器認爲是能夠直接展現的。
text/plain並非意味着某種文本數據。若是瀏覽器想要一個文本文件的明確類型,瀏覽器並不會考慮他們是否匹配。好比說,若是經過一個代表是下載CSS文件的<link>連接下載了一個 text/plain 文件。若是提供的信息是text/plain,瀏覽器並不會認出這是有效的CSS文件。CSS類型須要使用text/css。安全

  • text/css

在網頁中要被解析爲CSS的任何CSS文件必須指定MIME爲text/css。一般,服務器不識別以.css爲後綴的文件的MIME類型,而是將其以MIME爲text/plainapplication/octet-stream 來發送給瀏覽器:在這種狀況下,大多數瀏覽器不識別其爲CSS文件,直接忽略掉。特別要注意爲CSS文件提供正確的MIME類型。

  • text/html

全部的HTML內容都應該使用這種類型。XHTML的其餘MIME類型(如application/xml+html)如今基本再也不使用(HTML5統一了這些格式)。

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

據 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

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 用於把部分的響應報文發送回瀏覽器。當發送狀態碼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--

設置正確的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%可靠的方式。

其餘

歡迎關注 「後端老鳥」 公衆號,接下來會發一系列的專題文章,包括Java、Python、Linux、SpringBoot、SpringCloud、Dubbo、算法、技術團隊的管理等,還有各類腦圖和學習資料,NFC技術、搜索技術、爬蟲技術、推薦技術、音視頻互動直播等,只要有時間我就會整理分享,敬請期待,現成的筆記、腦圖和學習資料若是你們有需求也能夠公衆號留言提早獲取。因爲本人在全部團隊中基本都處於攻堅和探路的角色,搞過的東西多,遇到的坑多,解決的問題也不少,歡迎你們加公衆號進羣一塊兒交流學習。

【轉載請註明出處】:https://blog.csdn.net/huahao1989/article/details/107746738

image

相關文章
相關標籤/搜索