正確配置伺服器 MIME 型別
MIME 型別描述內容的媒體型別,無論是電子郵件,還是由 Web 伺服器或 Web 應用程式提供的。它們旨在提供關於如何處理和顯示內容的提示。
MIME 型別示例
text/html用於 HTML 文件。text/plain用於純文字。text/css用於層疊樣式表。text/javascript用於 JavaScript 檔案。text/markdown用於 Markdown 檔案。application/octet-stream用於需要使用者操作的二進位制檔案。
伺服器預設配置差異很大,對於沒有定義內容型別的檔案,會設定不同的*預設* MIME 型別值。
2.2.7 之前的 Apache Web Server 版本配置為對於未知內容型別報告 text/plain 或 application/octet-stream 的 MIME 型別。現代版本的 Apache 對於未知內容型別的檔案會報告 none。
如果你沒有定義預設內容型別,Nginx 將會報告 text/plain。
隨著新的內容型別被髮明或新增到 Web 伺服器中,Web 管理員可能會忘記將新的 MIME 型別新增到他們的 Web 伺服器配置中。這對那些尊重 Web 伺服器和應用程式報告的 MIME 型別的瀏覽器使用者來說是一個主要問題來源。
為什麼正確的 MIME 型別很重要?
如果 Web 伺服器或應用程式報告了內容的錯誤 MIME 型別(包括未知內容的“預設型別”),Web 瀏覽器就無法知道作者的意圖。這可能會導致意外的行為。
一些 Web 瀏覽器可能會嘗試*猜測*正確的 MIME 型別。這使得配置錯誤的 Web 伺服器和應用程式可以繼續為這些瀏覽器工作(但不能為其他正確實現標準的瀏覽器工作)。除了違反 HTTP 規範之外,這還因為以下幾個重要原因是一個壞主意。
JavaScript 遺留 MIME 型別
在查詢有關 JavaScript MIME 型別的資訊時,你可能會看到幾個引用 JavaScript 的 MIME 型別。其中一些 MIME 型別包括
application/javascriptapplication/ecmascriptapplication/x-ecmascriptapplication/x-javascripttext/ecmascripttext/javascript1.0text/javascript1.1text/javascript1.2text/javascript1.3text/javascript1.4text/javascript1.5text/x-ecmascripttext/x-javascript
雖然瀏覽器可能支援這些備用 MIME 型別中的任意一個、某些或全部,但你應該**只**使用 text/javascript 來指示 JavaScript 檔案的 MIME 型別。
注意: 有關更多資訊,請參閱 MIME 型別 (IANA 媒體型別)。
如何確定要設定的 MIME 型別
有幾種方法可以確定用於提供內容的正確 MIME 型別值。
- 如果你的內容是使用商業軟體建立的,請閱讀供應商的文件以檢視應該為應用程式報告哪些 MIME 型別。
- 檢視 IANA 的 MIME 媒體型別登錄檔,其中包含有關所有已註冊 MIME 型別的資訊。
- 在 FILExt 或 副檔名參考 中搜索副檔名以檢視與該副檔名關聯的 MIME 型別。請仔細注意,因為應用程式可能有多個 MIME 型別,它們僅在一個字母上有所不同。
如何檢查接收到的內容的 MIME 型別
- 在 Firefox 中
- 載入檔案並轉到**工具 > 頁面資訊**以獲取你訪問的頁面的內容型別。
- 你還可以轉到**工具 > Web 開發人員 > 網路**並重新載入頁面。請求選項卡會列出頁面載入的所有資源。單擊任何資源都會列出所有可用資訊,包括頁面的
Content-Type標頭。
- 在 Chrome 中
- 載入檔案並轉到**檢視 > 開發人員 > 開發人員工具**並選擇*網路*選項卡。重新載入頁面並選擇要檢查的資源。在標頭下查詢
Content-Type,它將報告資源的內容型別。
- 載入檔案並轉到**檢視 > 開發人員 > 開發人員工具**並選擇*網路*選項卡。重新載入頁面並選擇要檢查的資源。在標頭下查詢
- 在頁面原始碼中查詢一個
<meta>元素,該元素提供了 MIME 型別,例如<meta http-equiv="Content-Type" content="text/html">。- 根據標準,如果存在 Content-Type 標頭,則應忽略指定 MIME 型別的
<meta>元素。
- 根據標準,如果存在 Content-Type 標頭,則應忽略指定 MIME 型別的
IANA 保持一個已註冊的 MIME 媒體型別 列表。 HTTP 規範 定義了 MIME 型別的超集,用於描述在 Web 上使用的媒體型別。
如何設定您的伺服器以傳送正確的 MIME 型別
目標是配置你的伺服器,以便為每個文件傳送正確的 Content-Type 標頭。
- 如果你使用的是 Apache Web 伺服器,請檢視 Apache 配置:.htaccess 的**媒體型別和字元編碼**部分,以獲取不同文件型別及其對應 MIME 型別的示例。
- 如果你使用的是 Nginx,請注意 Nginx 沒有與
.htaccess等效的工具,因此所有更改都將進入主配置檔案。 - 如果你使用伺服器端指令碼或框架來生成內容,指示內容型別的方式將取決於你使用的工具。檢視框架或庫的文件。
無論你使用什麼伺服器系統,你需要實現的效果都是設定一個名為 Content-Type 的響應標頭,後面跟著一個冒號和空格,以及一個 MIME 型別。高階環境通常允許在生成頁面時設定此類標頭。例如,在 PHP 環境中,你可以像這樣設定 PDF 資源的響應標頭
header('Content-Type: application/pdf')
嘗試僅使用 header('application/pdf') 設定它將不起作用。