MIME 型別查詢

搜尋常見副檔名及其 IANA MIME 型別對照表,支援按頂級類別篩選,幫助你每次都設定正確的 Content-Type 響應頭。

這個檔案該用哪個 Content-Type 響應頭? 輸入 .webp 這樣的副檔名,或 image 這樣的媒體型別片段來篩選表格。所有條目均依據 IANA 媒體型別登錄檔和 MDN 常見型別清單。

匹配結果
副檔名 MIME 型別

MIME 型別告訴瀏覽器什麼

媒體型別的構成

MIME 型別——正式名稱是媒體型別——是伺服器附加在響應上的標籤,讓客戶端知道隨後的位元組該如何處理。它由斜槓分隔的兩部分組成:頂級型別,例如 textimageaudiovideofontmodelapplication;以及指明具體格式的子型別。image/pngapplication/json 都是完整的媒體型別,而單獨的 image 不是。

子型別自身也有一些約定。開頭的 x- 曾用於標記實驗性型別,例如 application/x-tar;雖然這種做法已被廢棄,但沿用下來的名稱部署過於廣泛,無法更改。結尾的 +字尾 表示該格式建立在更通用的語法之上:image/svg+xml 是 XML,application/ld+json 是 JSON,解析器在不認識具體格式時可以回退到基礎語法。

有些型別允許在分號後附加引數,其中最重要的是 charset,例如 text/html; charset=utf-8。在文本響應中省略它等於邀請瀏覽器去猜測編碼,這是亂碼的經典成因,因此顯式宣告 UTF-8 永遠值得多寫這幾個字元。

為什麼響應頭比副檔名更重要

瀏覽器根據 Content-Type 響應頭而不是 URL 中的檔名來決定如何處理響應。把 PNG 當作 text/plain 傳送會顯示一屏二進位制亂碼;把 JSON 標為 text/html 可能導致 fetch 客戶端拒絕它。響應頭正確,下載才會用正確的應用開啟,內聯資源才會渲染而不是被下載。

這種不匹配還有安全後果。老式瀏覽器會進行 MIME 嗅探:檢查響應的前若干位元組,並覆蓋它認為錯誤的響應頭。攻擊者只要能上傳一個看起來像 HTML 的檔案,即使伺服器把它標為圖片,也可能讓它在站點源下執行。X-Content-Type-Options: nosniff 響應頭可以關閉該行為,如今在任何提供使用者上傳內容的端點上都是標準做法。

對於下載場景,請把媒體型別與 Content-Disposition: attachment; filename="report.pdf" 搭配使用。媒體型別描述這些位元組是什麼,disposition 描述瀏覽器應該拿它們做什麼,二者回答的是不同的問題。

這份對映究竟儲存在哪裡

並不存在一份唯一權威的副檔名到型別的對照表,這一點常令人意外。IANA 註冊的是媒體型別本身,而從副檔名到型別的對映是各伺服器各自維護的本地約定。Apache 讀取 mime.types,nginx 有自己的 mime.types 檔案,應用框架也各自攜帶查詢表。這就是同一個 .wasm 檔案在一臺伺服器上被正確提供、在另一臺未更新的伺服器上卻變成 application/octet-stream 的原因。

application/octet-stream 是通用兜底值,含義是「任意二進位制資料」。當格式確實未知時它是誠實的答案,但它會讓內聯渲染失效,因此值得為站點經常提供的每種格式補上顯式對映。AVIF、JXL 和 WebAssembly 這類較新的格式,正是老舊伺服器配置中最常缺失的條目。

開源說明:使用原生 JavaScript 實現,不依賴第三方庫。

常見問題

為什麼我的檔案是下載而不是顯示?
要麼媒體型別是 `application/octet-stream`,要麼響應帶有 `Content-Disposition: attachment`。設定正確的型別並去掉 attachment 即可內聯渲染。
JSON 的 MIME 型別是什麼?
`application/json`。舊程式碼有時使用 `text/json` 或 `application/x-json`,但二者都未註冊,部分客戶端會拒絕。
JavaScript 該用 text/javascript 還是 application/javascript?
目前推薦 `text/javascript`。兩者在所有瀏覽器中都可用,但 HTML 規範最終選定了 text 形式,並將 application 形式列為過時。
需要加 charset 嗎?
文本型別需要。不加的話瀏覽器會去猜,非 ASCII 內容就會亂碼。請傳送 `text/html; charset=utf-8` 或對應型別的等價寫法。
+xml 或 +json 字尾是什麼意思?
表示該格式建立在更通用的語法之上。不認識 `application/ld+json` 的客戶端仍能把它當作 JSON 解析,這讓通用工具鏈成為可能。
為什麼伺服器給 .webp 或 .avif 發錯型別?
該副檔名在伺服器的 `mime.types` 檔案中缺失。在伺服器配置裡補一條顯式對映即可,檔案本身沒有問題,無需改動。