教程
https://www.cnblogs.com/jsean/articles/1610265.html
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
最近在讀 Golang 的源碼取董,看到 mime.go 這個文件時棍苹,有點看不懂了。
MIME 簡介
MIME, Mutipurpose Internet Mail Extensions,多用途 Internet 郵箱擴(kuò)展茵汰。MIME 是描述消息內(nèi)容類型的 internet 標(biāo)準(zhǔn)枢里。在創(chuàng)建之初,是為了在發(fā)送電子郵件時附加多媒體數(shù)據(jù)蹂午,讓郵件客戶程序根據(jù)其類型進(jìn)行處理±覆颍現(xiàn)在 MIME TYPE 被 HTTP 協(xié)議支持后,使得HTTP能夠傳輸各種各樣的文件豆胸。
瀏覽器與 MIME-TYPE
瀏覽器通過 MIME TYE,也就是該資源的媒體類型冰悠,來決定以什么形式顯示數(shù)據(jù)。
媒體類型通常是通過 HTTP 協(xié)議配乱,由 Web 服務(wù)器請求頭中的 Content-Type 來告知瀏覽器數(shù)據(jù)類型的溉卓,比如:
Content-Type: text/HTML
表示內(nèi)容是 text/HTML 類型,也就是超文本文件搬泥。注意桑寨,必須是 "text/HTML" 而不是 "HTML/text".因為 MIME 是經(jīng)過 ietf 組織協(xié)商,以 RFC 的形式發(fā)布在網(wǎng)上的忿檩。
自定義的類型
需要注意的是:只有一些在互聯(lián)網(wǎng)上獲得廣泛應(yīng)用的格式才會獲得一個 MIME Type尉尾,如果是某個客戶端自己定義的格式,一般只能以 application/x- 開頭燥透。
Internet 中有一個專門組織來對 MIME 標(biāo)準(zhǔn)進(jìn)行修訂沙咏,但是由于 Internet 發(fā)展過快辨图,很多應(yīng)用程序便使用在類別中以 x- 開頭的方法標(biāo)識這個類別還沒有成為標(biāo)準(zhǔn),例如 x-gzip,x-tar等肢藐。
其實是不是標(biāo)準(zhǔn)無關(guān)緊要故河,只要客戶端和服務(wù)器都能識別這個格式就可以了。在 app 端會使用自定義標(biāo)準(zhǔn)來保證數(shù)據(jù)安全吆豹。
MIME類型與文檔的后綴相關(guān)鱼的,因此服務(wù)器使用文檔的后綴來區(qū)分不同文件的 MIME 類型,服務(wù)器中必須規(guī)定文件后綴和MIME類型之間的對應(yīng)關(guān)系痘煤。而客戶端從服務(wù)器上接收數(shù)據(jù)的時候凑阶,它只是從服務(wù)器接收數(shù)據(jù)流,并不了解文檔的名字衷快,因此服務(wù)器需要使用附加信息來告訴客戶程序數(shù)據(jù)的 MIME 類型宙橱。服務(wù)器將首先發(fā)送以下兩行 MIME 標(biāo)識信息,這個信息并不是真正的數(shù)據(jù)文件的一部分蘸拔。
Context-type: text/html
注意师郑,第二行為一個空格,這是必須的都伪,使用這個空行的目的是將 MIME 信息與真正的數(shù)據(jù)內(nèi)容分離開。
MIME TYPE語法 及常見分類
通用結(jié)構(gòu):type/subtype
MIME 類型對大小寫不敏感积担,但是通常傳統(tǒng)寫法是小寫陨晶。
分類
分類 | 描述 | 典型類型 |
---|---|---|
text | 表明是普通文本 | text/plain, text/html, text/css, text/javascript |
image | 表示是某種圖像,不包括視頻文件帝璧,但是包括動態(tài)圖 | 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,/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf,application/json |
對于 text 文件類型若是沒有特定的 subtype先誉,就使用 text/plain, 類似的二進(jìn)制文件如果沒有特定或已知的 subtype,就使用 application/octet-stream.
重要的 MIME 類型
text/plain
文本文件默認(rèn)值的烁,意思是未知的文本文件褐耳,瀏覽器認(rèn)為是可以直接展示的。
text/css
任何一個 CSS 文件想要在網(wǎng)頁上被解釋執(zhí)行就必須設(shè)為 text/css 文件渴庆。如果服務(wù)器將 MIME 類型設(shè)置為 text/plain 或 application/octet-stream 發(fā)送铃芦,這種情況下,文件并不能被瀏覽器識別為 CSS 文件并且會被直接忽略襟雷。
text/html
所有的 HTML 內(nèi)容都應(yīng)該使用這種格式刃滓。
圖片類型
MIME 類型 | 圖片類型 |
---|---|
image/gif | GIF 圖片 |
image/jpeg | JPEG圖片 |
image/png | PNG圖片 |
image/svg+xml | SVG 圖片(矢量圖) |
還有非MIME 類型,但是比較通用的 icon 類型耸弄,image/x-icon