教程
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 郵箱擴充。MIME 是描述訊息內容類型的 internet 標準。在建立之初,是為了在寄送電子郵件時附加多媒體資料,讓郵件客戶程式根據其類型進行處理。現在 MIME TYPE 被 HTTP 協議支援後,使得HTTP能夠傳輸各種各樣的檔案。
瀏覽器與 MIME-TYPE
瀏覽器通過 MIME TYE,也就是該資源的媒體類型,來決定以什麼形式顯示資料。
媒體類型通常是通過 HTTP 協議,由 Web 服務器要求標頭中的 Content-Type 來告知瀏覽器資料類型的,比如:
Content-Type: text/HTML
表示內容是 text/HTML 類型,也就是超文字檔。注意,必須是 "text/HTML" 而不是 "HTML/text".因為 MIME 是經過 ietf 組織協商,以 RFC 的形式發布在網上的。
自訂的類型
需要注意的是:只有一些在互連網上獲得廣泛應用的格式才會獲得一個 MIME Type,如果是某個用戶端自己定義的格式,一般只能以 application/x- 開頭。
Internet 中有一個專門組織來對 MIME 標準進行修訂,但是由於 Internet 發展過快,很多應用程式便使用在類別中以 x- 開頭的方法標識這個類別還沒有成為標準,例如 x-gzip,x-tar等。
其實是不是標準無關緊要,只要用戶端和伺服器都能識別這個格式就可以了。在 app 端會使用自訂標準來保證資料安全。
MIME類型與文檔的尾碼相關,因此伺服器使用文檔的尾碼來區分不同檔案的 MIME 類型,伺服器中必須規定檔案尾碼和MIME類型之間的對應關係。而用戶端從伺服器上接收資料的時候,它只是從伺服器接收資料流,並不瞭解文檔的名字,因此伺服器需要使用附加資訊來告訴客戶程式資料的 MIME 類型。伺服器將首先發送以下兩行 MIME 標識資訊,這個資訊並不是真正的資料檔案的一部分。
Context-type: text/html
注意,第二行為一個空格,這是必須的,使用這個空行的目的是將 MIME 資訊與真正的資料內容分離開。
MIME TYPE文法 及常見分類
通用結構:type/subtype
MIME 類型對大小寫不敏感,但是通常傳統寫法是小寫。
分類
分類 |
描述 |
典型類型 |
text |
表明是普通文本 |
text/plain, text/html, text/css, text/javascript |
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 |
表示某種位元據 |
application/octet-stream,/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf,application/json |
對於 text 檔案類型若是沒有特定的 subtype,就使用 text/plain, 類似的二進位檔案如果沒有特定或已知的 subtype,就使用 application/octet-stream.
重要的 MIME 類型
text/plain
文字檔預設值,意思是未知的文字檔,瀏覽器認為是可以直接展示的。
text/css
任何一個 CSS 檔案想要在網頁上被解釋執行就必須設為 text/css 檔案。如果伺服器將 MIME 類型設定為 text/plain 或 application/octet-stream 發送,這種情況下,檔案並不能被瀏覽器識別為 CSS 檔案並且會被直接忽略。
text/html
所有的 HTML 內容都應該使用這種格式。
圖片類型
MIME 類型 |
圖片類型 |
image/gif |
GIF 圖片 |
image/jpeg |
JPEG圖片 |
image/png |
PNG圖片 |
image/svg+xml |
SVG 圖片(向量圖) |
還有非MIME 類型,但是比較通用的 icon 類型,image/x-icon