正確配置伺服器 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/plainapplication/octet-stream 的 MIME 型別。現代版本的 Apache 對於未知內容型別的檔案會報告 none

如果你沒有定義預設內容型別,Nginx 將會報告 text/plain

隨著新的內容型別被髮明或新增到 Web 伺服器中,Web 管理員可能會忘記將新的 MIME 型別新增到他們的 Web 伺服器配置中。這對那些尊重 Web 伺服器和應用程式報告的 MIME 型別的瀏覽器使用者來說是一個主要問題來源。

為什麼正確的 MIME 型別很重要?

如果 Web 伺服器或應用程式報告了內容的錯誤 MIME 型別(包括未知內容的“預設型別”),Web 瀏覽器就無法知道作者的意圖。這可能會導致意外的行為。

一些 Web 瀏覽器可能會嘗試*猜測*正確的 MIME 型別。這使得配置錯誤的 Web 伺服器和應用程式可以繼續為這些瀏覽器工作(但不能為其他正確實現標準的瀏覽器工作)。除了違反 HTTP 規範之外,這還因為以下幾個重要原因是一個壞主意。

失去控制

如果瀏覽器忽略了報告的 MIME 型別,Web 管理員和作者將不再能控制其內容的處理方式。

例如,一個面向 Web 開發人員的網站可能希望將某些示例 HTML 文件傳送為 text/htmltext/plain,以便文件可以被處理並顯示為 HTML 或原始碼。如果瀏覽器猜測了 MIME 型別,作者將不再有此選項。

安全性

一些內容型別,例如可執行程式,本質上是不安全的。因此,這些 MIME 型別通常在 Web 瀏覽器在獲得此型別內容時會採取的操作方面受到限制。可執行程式不應該在使用者的計算機上執行,至少應該出現一個對話方塊,**詢問使用者**是否要下載該檔案。

JavaScript 遺留 MIME 型別

在查詢有關 JavaScript MIME 型別的資訊時,你可能會看到幾個引用 JavaScript 的 MIME 型別。其中一些 MIME 型別包括

  • application/javascript
  • application/ecmascript
  • application/x-ecmascript
  • application/x-javascript
  • text/ecmascript
  • text/javascript1.0
  • text/javascript1.1
  • text/javascript1.2
  • text/javascript1.3
  • text/javascript1.4
  • text/javascript1.5
  • text/x-ecmascript
  • text/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> 元素。

IANA 保持一個已註冊的 MIME 媒體型別 列表。 HTTP 規範 定義了 MIME 型別的超集,用於描述在 Web 上使用的媒體型別。

如何設定您的伺服器以傳送正確的 MIME 型別

目標是配置你的伺服器,以便為每個文件傳送正確的 Content-Type 標頭。

  • 如果你使用的是 Apache Web 伺服器,請檢視 Apache 配置:.htaccess 的**媒體型別和字元編碼**部分,以獲取不同文件型別及其對應 MIME 型別的示例。
  • 如果你使用的是 Nginx,請注意 Nginx 沒有與 .htaccess 等效的工具,因此所有更改都將進入主配置檔案。
  • 如果你使用伺服器端指令碼或框架來生成內容,指示內容型別的方式將取決於你使用的工具。檢視框架或庫的文件。

無論你使用什麼伺服器系統,你需要實現的效果都是設定一個名為 Content-Type 的響應標頭,後面跟著一個冒號和空格,以及一個 MIME 型別。高階環境通常允許在生成頁面時設定此類標頭。例如,在 PHP 環境中,你可以像這樣設定 PDF 資源的響應標頭

php
header('Content-Type: application/pdf')

嘗試僅使用 header('application/pdf') 設定它將不起作用。