MIME类型

**網際網路媒體類型**（Internet media type，也稱為 **MIME 類型**（**MIME type**）或**內容類型**（**content type**））是給網際網路上傳輸的內容賦予的分類類型。一份內容的網際網路媒體類型是由其檔案格式與內容決定的。網際網路媒體類型與檔案拓展名相對應，因此電腦系統常常通過拓展名來確定一個檔案的媒體類型並決定與其相關聯的軟體。網際網路媒體類型的分類標準由網際網路號碼分配局（IANA）發布。1996 年十一月，媒體類型在 RFC 2045 中被最初定義，當時僅被使用在 SMTP 協定的電子郵件中。現在其他的協定（比如 HTTP 或者 SIP）也都常使用 MIME 類型。
一個 MIME 類型至少包括兩個部分：一個_類型（type）_ 和一個_子類型（subtype）_ 。此外，它還可能包括一個或多個_可選參數（optional parameter）_ 。比如，HTML 檔案的網際網路媒體類型可能是

`text/html; charset = UTF-8`

在這個例子中，檔案類型為 `text`，子類型為 `html`，而 `charset` 是一個可選參數，其值為 `UTF-8`。

## 命名格式

一個 MIME 類型包括一個_類型（type）_ ，一個_子類型（subtype）_ 。此外可以加上一個或多個_可選參數（optional parameter）_ 。其格式為

 `类型名 / 子类型名 [ ; 可选参数 ]` 

目前已被註冊的類型名有 `application`、`audio`、`example`、`image`、`message`、`model`、`multipart`、`text`，以及 `video`。`chemical` 是一個非官方的常用類型名。此外，非標準的類型名一般會加上 `x-` 字首，但這種做法已經過時。

子類型名通常是一個媒體形式被冠以的名稱，不過子類型名中也會有其它資訊，包括廠商資訊、產品資訊、分類資訊（子類型會被歸進一個樹狀的分類結構中）、字尾等等。_樹結構分類資訊_以被 `.` 相互連接的字串表示。每一個由 `.` 分隔開的部分又可以加上與其以 `-` 相連接的附加資訊。此外，子類型名中也會有放在最後，與前面的內容以 `+` 相連接的_字尾_。因此，一個媒體類型的格式可以被更加細地表示為：

 `类型名 / [ 树结构分类信息（中间可能有一个或多个“.”） ] 子类型名（中间可能有一个或多个“-”） [ + 后缀 ] [ ; 可选参数 ]` 

這些資訊遵循_註冊樹_（見下）的規定。

### 註冊樹（Registration Tree）

所有的媒體類型都是通過 IANA 的流程註冊的。為了保證註冊流程的靈活性與效率，子類型被歸進了一個樹結構的分類中。樹結構資訊被放在了子類型名的最前面，以 `.` 與其它部分分隔。現在，存在以下幾種樹：標準樹（Standards Tree）、廠商樹（Vendor Tree）、個人樹（Personal or Vanity Tree）、以及非標準的 `x.` 為字首的樹。這些樹最早於 1996 年十一月隨著 RFC 2048 被定義出來。IETF 標準行動（Standard Action）可能會創造新的註冊樹以滿足著名的持續性組織（比如科學社群）的註冊和管理需求。

#### 標準樹

標準樹中的子類型名不需要樹結構資訊（也就是不需要帶 `.` 的字首）。

 `类型名 / 子类型名 [ + 后缀 ] [ ; 可选参数 ]` 

要註冊標準樹中的子類型，其必須遵從 IESG 直接批准的 IETF 規範，或者被由 IANA 認證的標準相關組織註冊。

#### 廠商樹

廠商樹中包含與公開使用的產品相聯絡的媒體類型。其使用 `vnd.` 字首。在字首之後必須是著名廠商的名稱或是 IANA 認證廠商的名稱加上表示檔案類型和 / 或內容的文字。

 `类型名 / **vnd.**子类型名 [ + 后缀 ] [ ; 可选参数 ]` 

比如與 Debian 專案組織提供的 dpkg 相關聯的.deb 檔案的 MIME 類型是：

`application/vnd.debian.binary-package`

其中，`debian` 是廠商（生產方）名稱，而 `binary-package` 是對檔案類型和內容的描述。

「廠商」與「生產方」在這個語境下是相同的概念。工業財團和非盈利組織也可以註冊廠商樹中的媒體類型。任何想要傳播與某種軟體緊密聯絡的檔案格式的人都可以註冊廠商樹中的子類型，但是這個子類型是屬於該軟體或是檔案格式的生產方的。這種情況下，廠商可以選擇在任何時間聲明自己擁有第三方進行的註冊的所有權。

#### 個人樹

個人樹中包含試驗性或者不會以商業形式公開的子類型。個人樹中的子類型名的字首是 `prs.`

 `类型名 / **prs.**子类型名 [ + 后缀 ] [ ; 可选参数 ]` 

個人樹中的子類型屬註冊者所有，但也可以轉讓。

#### 未註冊的 x. 樹

以 `x.` 為第一字首的子類型名僅能夠在私人的、原生的環境中使用。此類型的子類型不能被註冊。其只能在相互間同意的各方中傳輸使用。儘管有時未被註冊的 MIME 類型必須被使用，這是不被推薦的。

 `类型名 / **x.**子类型名 [ + 后缀 ] [ ; 可选参数 ]` 

帶有 `x-` 的子類型名原先被歸到這顆樹中，但是這種做法已經不被採用。如果一個帶有 `x-` 字首的子類型名被廣泛使用和接受，其可能最終會被註冊並且歸進其它樹中，儘管 `x-` 本身已經過時。

## 媒體類型列表

IANA 維護著一個媒體類型和字元編碼的記錄列表。他們的列表通過網際網路向公眾開放。

### Type application

分別對於不同用途的檔案：

* `application/atom+xml`：Atom feeds
* `application/ecmascript`：ECMAScript/JavaScript;（相當於 `application/javascript` 但是嚴格的處理規則）
* `application/EDI-X12`：EDI ANSI ASC X12 資料
* `application/EDIFACT`：EDI EDIFACT 資料
* `application/json`：JSON（JavaScript Object Notation）
* `application/javascript`：ECMAScript/JavaScript（相當於 `application/ecmascript` 但是寬鬆的處理規則）它不被 IE 8 或更早之前的版本所支援。雖然可以改用 `text/javascript`，但它卻被 RFC 4329 定義為過時。在 HTML5 之中，`<script>` 標籤的 _type_ 的屬性是可省略的，因為所有的瀏覽器即使在 HTML5 以前都一直預設使用 JavaScript。
* `application/octet-stream`: 任意的二進制檔案（通常做為通知瀏覽器下載檔案）Generally speaking this type identifies files that are not associated with a specific application. Contrary to past assumptions by software packages such as Apache this is not a type that should be applied to unknown files. In such a case, a server or application should not indicate a content type, as it may be incorrect, but rather, should omit the type in order to allow the recipient to guess the type.
* `application/ogg`：Ogg, 視訊檔格式
* `application/pdf`：PDF（Portable Document Format）
* `application/postscript`：PostScript
* `application/rdf+xml`：Resource Description Framework
* `application/rss+xml`：RSS feeds
* `application/soap+xml`：SOAP
* `application/font-woff`：Web Open Font Format;（推薦使用；使用 `application/x-font-woff` 直到它變為官方標準）
* `application/xhtml+xml`：XHTML
* `application/xml`：XML 檔案
* `application/xml-dtd`：DTD 檔案
* `application/xop+xml`：XML-binary Optimized Packaging
* `application/zip`：ZIP 壓縮檔
* `application/gzip`：Gzip

### Type audio

數位音訊檔案：

* `audio/mp4`：MP4 音訊檔案
* `audio/mpeg`：MP3 或其他 MPEG 音訊檔案
* `audio/ogg`：Ogg 音訊檔案
* `audio/vorbis`：Vorbis 音訊檔案
* `audio/vnd.rn-realaudio`：RealAudio 音訊檔案
* `audio/vnd.wave`：WAV 音訊檔案
* `audio/webm`：WebM 音訊檔案
* `audio/flac`：FLAC 音訊檔案

### Type image

圖檔：

* `image/gif`：GIF 圖檔
* `image/jpeg`：JPEG 圖檔
* `image/png`： PNG 圖檔
* `image/webp`： WebP 圖檔
* `image/svg+xml`：SVG 向量圖檔
* `image/tiff`：TIFF 圖檔
* `image/icon`：ICO 圖片檔案。

### Type message

### Type model

3D 電腦圖形檔案：

* `model/example`
* `model/iges`：IGS files, IGES files
* `model/mesh`：MSH files, MESH files
* `model/vrml`：WRL files, VRML files
* `model/x3d+binary`：X3D ISO standard for representing 3D computer graphics, X3DB binary files
* `model/x3d+vrml`：X3D ISO standard for representing 3D computer graphics, X3DV VRML files
* `model/x3d+xml`：X3D ISO standard for representing 3D computer graphics, X3D XML files

### Type multipart

### Type text

* `text/css`：CSS 檔案
* `text/csv`：CSV 檔案
* `text/html`：HTML 檔案
* `text/javascript` (**過時**): JavaScript; 在 RFC 4329 中定義並捨棄，以減少使用，推薦使用 `application/javascript`。然而，相比於 `application/javascript` ，在 HTML 4 和 5 中，可以使用 `text/javascript` ，且有跨瀏覽器的支援。因為在使用 `<script>` 時，對於其 "type" 屬性 ，所有瀏覽器都會使用正確的預設值（儘管 HTML 4 的規格中明確要求），所以 HTML 5 中定義為選擇性的，且沒必要。
* `text/plain`: 純文字內容
* `text/vcard`：vCard（電子名片）
* `text/xml`：XML

### Type video

視訊檔格式檔案（可能包含數位影片與數位音訊）：

* `video/mpeg`：MPEG-1 影片檔案
* `video/mp4`：MP4 影片檔案
* `video/ogg`：Ogg 影片檔案
* `video/quicktime`：QuickTime 影片檔案
* `video/webm`：WebM 影片檔案（基於 Matroska 基礎）
* `video/x-matroska`：Matroska（多媒體封裝格式）
* `video/x-ms-wmv`：Windows Media Video 影片檔案
* `video/x-flv`：Flash Video（FLV 檔）

## 參考文獻

## 參見

* 影片轉換
* Data URI scheme

## 外部連結

* IANA 的 types MIME 列表（頁面存檔備份，存於網際網路檔案館）