MIME Type Lookup API 的替代方案是一種工具,可在不呼叫第三方服務、不透過網路傳輸位元組,也不依賴已安裝的系統函式庫的情況下,解析已註冊的媒體類型。MIME Type Lookup 參考資料完全在瀏覽器分頁內運作:輸入像 .json 這樣的副檔名、像 image 這樣的媒體家族、像 font/woff2 這樣的完整註冊值,或一段通俗英文的格式描述,表格就會在記憶體中篩選出一套精選的 24 個 IANA 註冊媒體類型。每一列都同時保留描述、副檔名別名,以及精確的基礎類型,因此像 image/png、application/json、text/javascript 這樣的單一註冊字串,可以直接複製到 Content-Type 標頭、上傳白名單、測試 fixtures 或設定檔中。由於不會開啟任何檔案、不會上傳任何內容,也沒有任何請求離開頁面,因此這項查詢機制避開了速率限制、網路延遲、廠商綁定,以及將檔名或部分位元組送到遠端端點所衍生的隱私疑慮。

採用瀏覽器內建 MIME Type 參考資料的理由

外部的 MIME type 查詢端點會引入容易被人忽略的依賴關係:每次猜測都要走一趟網路來回、在負載測試期間受到速率限制、CI 環境內部有廠商服務中斷的風險,以及究竟把哪些檔名或位元組前綴送到裝置外部的隱私問題。瀏覽器內建參考資料能避開這些疑慮,因為對照表會隨頁面一同載入,並在記憶體中進行篩選。此參考資料提供 24 個精選的 IANA 媒體類型,可涵蓋大多數的網頁回應、文件上傳、影像管線、音訊與影片元素、封存檔下載、字型載入,以及二進位 fallback。相同的模式同樣適用於其他希望能貼近開發者、而非躲在付費 SaaS 背後的開發者參考資料,而關於「在本地驗證,而不是呼叫端點」這個更廣泛的做法,已在 file signatures list API alternatives 一文中詳細說明,可用於 magic-byte 查詢。

完全在用戶端運作也讓查詢結果具有可重現性:在同一瀏覽器下執行相同的查詢,永遠會回傳相同的列,因此測試 fixtures 能保持穩定,新成員 onboarding 時也不需要另外開立 API 金鑰。本機參考資料能乾淨地融入離線文件、內部風格指南,以及無法連線到外部服務的 air-gapped 環境。

參考資料的建構方式與涵蓋範圍

此表格儲存了 24 個 IANA 註冊的媒體類型,每個都有唯一的識別碼與唯一的基礎類型字串。搜尋功能會同時篩選正規化後的副檔名、媒體類型與描述欄位,因此單一查詢可以同時解析三種不同的入口:.json、媒體家族名稱 image,或完整的註冊值 font/woff2。共有八組外部 fixtures 會鎖定 HTML、CSS、JavaScript、JSON、PNG、JPEG、SVG 與 WOFF2 的對應關係,讓最常用的錨點在各次更新中維持穩定。一般性的 fallback application/octet-stream 刻意以不掛載副檔名的方式納入,因為未知的二進位資料並沒有單一誠實的檔名。

複製某一列時,只會複製媒體類型本身,絕不會包含列 ID、描述或別名清單,因此剪貼簿中永遠只會放著可以直接貼上回應標頭或上傳白名單的值。IANA Media Types registry 與 MDN common media types 表格都是這份精選集的參考來源,只要某格式落在這 24 列範圍之外,本參考資料就會反連回這些權威來源。頁面上的所有功能都在本地執行:搜尋文字於記憶體內進行篩選,點擊後透過瀏覽器剪貼簿複製,不會開啟或上傳任何檔案。

三步驟查詢媒體類型

  1. 在搜尋欄位中輸入副檔名、格式名稱或媒體類型。輸入 png、image 或 image/png 都會命中同一列,因為篩選機制會同時檢查副檔名、頂層 family 與基礎類型。查詢 json 會回傳 application/json;查詢 woff2 會回傳 font/woff2;查詢 javascript 即使該值被記為 text/jscript 或 application/x-javascript,仍會回傳 text/javascript。
  2. 確認相符的描述與副檔名別名。描述為通俗英文(如「JPEG image」),別名則列出該格式常用的所有檔名副檔名(如 .jpg、.jpeg,以及在適用情況下的 .jfif)。請把基礎類型視為具權威性的標準,把別名視為對應檔名的實用提示,而不是對應位元組的依據。
  3. 複製精確的基礎媒體類型,並在使用前對實際內容進行驗證。將 image/png 貼到回應標頭、CDN 規則、上傳白名單或測試 fixture 中,接著在已部署的回應上確認標頭、在已儲存的物件上確認位元組,之後才能將任一者視為可信。

副檔名、標頭與嗅探類型出現分歧之處

副檔名只是一種提示,並非證據;瀏覽器提供的 File.type 值可能是空白、過期,或是衍生自作業系統的副檔名對照表,而非來自位元組本身。一個名為 picture.png 的檔案可能帶有非 PNG 的內容;攻擊者可以將 evil.bin 改名為 evil.png,而不變動其內部內容。同源請求、內嵌資源與下載,全都仰賴伺服器端送出的 Content-Type 來套用 nosniff 等保護機制,並選擇正確的解碼器。一旦值不正確,模組、樣式表、字型、媒體或下載就可能無法載入;而在上傳端,只依副檔名建立的白名單,就可能放行本該被擋下的 payload。

因此,安全的上傳處理必須檢查實際內容、強制嚴格的尺寸與格式限制、使用安全且有持續維護的 parser 進行解碼、重新命名儲存的物件、將其與執行環境隔離,並套用授權機制——查詢表、請求標頭或嗅探類型絕不能成為唯一的安全決策。charset=utf-8 這類參數也並非可任意套用的萬用預設;它只適用於文字型格式,而且僅在註冊的基礎類型確實接受時才能使用。本參考資料刻意只列出基礎註冊類型,因此 charset 宣告、boundary 參數、codec、content disposition、壓縮與 transfer encoding,都會留待基礎類型確定後,由開發者另行決定。

參考資料所錨定的常見媒體類型

下表列出八組由 fixtures 鎖定的對應關係,以及通用的二進位 fallback。所有值皆直接來自精選集及其背後的 IANA 與 MDN 來源;請將其視為目前的常用對應,而不是所有伺服器、註冊系統或歷史瀏覽器皆會同意的保證。

描述基礎媒體類型常見副檔名
HTML documenttext/html.html, .htm
CSS stylesheettext/css.css
JavaScript moduletext/javascript.js, .mjs
JSON dataapplication/json.json
PNG imageimage/png.png
JPEG imageimage/jpeg.jpg, .jpeg
SVG vector imageimage/svg+xml.svg
WOFF2 fontfont/woff2.woff2
Generic binary dataapplication/octet-stream(none)

部分格式帶有情境性或歷史性的替代方案。XML 可透過 application/xml 來提供,而專門的 XML 詞彙則使用專屬的 +xml 子型別,例如 image/svg+xml 或 application/atom+xml。JavaScript 過去曾以數個舊有值出現(text/jscript、application/x-javascript、application/javascript);現行的網頁指引與 IANA 註冊採用 text/javascript。.gz 封存檔可能會使用已註冊的 application/gzip,或某些平台非標準的 x-gzip 值,本參考資料只保留一組目前常用的對應,而不假裝每個平台都會一致。

精選集的限制與 IANA 真理來源

本參考資料刻意限制在 24 列,而不是鏡像完整 IANA 註冊系統——後者橫跨數十個頂層樹,含有數千個已註冊的子型別。廠商專屬的 office 格式、multipart boundary 結構、email transfer encoding、codec 參數,以及冷門的註冊子型別,全都落在精選集之外;當某格式不在表中,或某協定契約仰賴最新的註冊結果時,本工具會反指回 IANA 註冊系統。註冊資料與實作指引可能會獨立於任何精選集而演進,因此在推出嚴格的上傳器或明文記載的 Content-Type 政策之前,請重新檢查主要註冊系統。

請將未知內容視為不可信任的二進位資料,優先採用明確的白名單,而非直接接受表中每一列;同時請記住,正確的 Content-Type 能協助瀏覽器正確解讀回應,並讓 nosniff 等保護機制如設計般生效。值得信賴的工作流程始終如一:在表中找到目標格式、確認位元組確實與其相符、複製註冊的基礎類型,並在已部署的系統上測試實際的回應或上傳路徑。

若想進一步了解,可參閱 PX to REM Without an API: A Local Browser Workflow。