用語辞典・データ・文字コード

MIMEタイプ

MIMEタイプとは

MIMEタイプ(Multipurpose Internet Mail Extensions type/マルチパーパス・インターネット・メール・エクステンションズ・タイプ/マイムタイプ)は、ファイルやHTTP本文の種類と形式を、種類/下位種類の形で示す識別子です。正式な総称はmedia type(メディア・タイプ)です。

例としてHTMLはtext/html、JPEG画像はimage/jpeg、JSONはapplication/jsonです。受信側はこの情報を手掛かりに、文字として表示するか、画像デコーダーへ渡すか、保存するかを決めます。

MIMEタイプはファイル名の言い換えではなく、送られている表現の形式を示すプロトコルメタデータです。拡張子と一致するか、実際の本文がその形式かを別に確認します。

本文へ種類/下位種類と引数のラベルを付ける画像・音声・動画・表データ・マルチパートを正しい処理へ渡す
HTTPメッセージの本文へ二分された種類ラベルと複数のパラメーター札が付き、画像・音声・動画・表データ・複数部品の処理へ分岐する流れ、送信内容と受信希望、文字集合・境界・動画形式のパラメーター、拡張子不一致、内容推測の危険、公式登録簿を示すピクトグラム図解
図1ラベルは受信側の処理を選ぶ重要な入力です。正しい送信側設定と、受信側の妥当性検査の両方が必要です。

種類/下位種類と引数

種類大分類

textimageaudiovideoapplicationmultipartなどがあります。

下位種類具体的な形式

htmljpegjsonなど、種類内の形式を示します。

引数追加情報

charset=utf-8、マルチパートのboundaryなどをセミコロンで続けます。

接尾辞共通構造

+json+xmlは基礎となる表現形式を示す構造化構文接尾辞です。

Content-Typeは実際に送った本文を示す

HTTPContent-Typeヘッダーは、メッセージに含まれる表現のメディアタイプを送信者が示します。Content-Encodingで圧縮されている場合、Content-Typeは圧縮解除後の形式を表します。

サーバーがCSSをtext/plain、JavaScriptモジュールを誤った種類で返すと、ブラウザーは実行を拒否する場合があります。Webサーバーの拡張子対応表とアプリケーションの応答ヘッダーを確認します。

Acceptは受信側の希望

Accept要求ヘッダーは、クライアントが応答として受け入れられるメディアタイプの範囲と優先度を示します。Content-Typeが実際の本文、Acceptが希望する応答形式です。

サーバーは利用可能な表現から選ぶコンテントネゴシエーションを行い、選んだ実際の種類を応答Content-Typeへ書きます。Acceptにない形式を返すか、406 Not AcceptableにするかはAPIの仕様と実装で決めます。

代表的な引数

引数使う場所役割
charset主にテキストメディアタイプ文字をバイトから復号する文字エンコーディングを示します。
boundarymultipart/*複数本文の各部分を区切る、本文中と衝突しない文字列です。
codecs音声・動画などコンテナー内のコーデック構成を示し、再生可否の判断に使われます。

引数名は大小文字を区別しませんが、値の大小文字可否や引用符は引数定義ごとに確認します。未知の引数を理由なく本文形式そのものの誤りとみなさない一方、必須引数の欠落は検証します。

拡張子とは別の情報

.jpg.jsonはファイル名の慣習で、MIMEタイプはプロトコルやメタデータ内の識別子です。名前をphoto.jpgへ変えても、中身がJPEGへ変換されるわけではありません。

アップロードでは拡張子、申告Content-Type、マジックナンバーや安全なデコーダーによる実体検査を組み合わせます。申告値だけを信頼して公開ディレクトリーへ置くと、スクリプトや不正形式を実行可能な種類で配信する危険があります。

MIMEタイプの推測とnosniff

内容や先頭バイトから形式を推測するMIME sniffing(マイム・スニッフィング)は、誤設定された古い内容を表示する互換処理です。しかし送信者の指定と違う実行可能形式として解釈すると、安全性の境界を越えます。

Webでは正しいContent-Typeを送り、必要な資源へX-Content-Type-Options: nosniffを付けます。これは正しい種類設定の代わりではなく、ブラウザーへ推測を抑止させる補助です。

登録済み・ベンダー・個人用ツリー

メディアタイプはIANAのレジストリで管理されます。広く交換する新形式は登録手続きと命名規則に従います。vnd.を含むベンダーツリー、prs.を含む個人用ツリー、x-で始まる未登録名を見かけることがあります。

既に登録された適切な種類があるのに独自名を増やすと、クライアントが扱えません。独自APIでも、JSONならapplication/jsonまたは登録したapplication/...+jsonを使い、意味はAPI仕様で示します。

メールでは本文の構造と転送方式も示す

MIMEは元々メールへ非ASCII本文や添付ファイルを載せる拡張です。各部にContent-Typeを付け、multipart/mixedなどで複数部をまとめます。

Base64やQuoted-PrintableはContent-Transfer-Encodingであり、MIMEタイプとは別です。前者は転送上のバイト表現、後者は復号後の本文形式を示します。

MIMEタイプは種類/下位種類と引数で本文形式を示します。Content-TypeとAccept、文字集合とContent-Transfer-Encoding、拡張子と実体を分け、IANA登録名を正しく送ります。

media typeの登録構造:RFC 6838/HTTPのContent-Type:RFC 9110/登録一覧:IANA Media Types Registry

関連用語