Multipurpose Internet Mail Extensions (MIME) タイプは、文書、ファイル、またはバイト列の性質や形式を示す標準です。IETF RFC 6838 で定義され、標準化されています。

Internet Assigned Numbers Authority (IANA) はすべての公式の MIME タイプを管理しており、Media Types ページで最新の完全なリストを見つけることができます。

ブラウザーは URL を処理する方法を決定するために、ファイル拡張子ではなく MIME タイプを使用します。サーバーはレスポンスの Content-Type ヘッダーで正しい MIME タイプを送信することが重要です。

構文

全般的な構造

タイプ/サブタイプ

MIME タイプはタイプサブタイプで構成されます。これは / で区切られた二つの文字列です。空白は許可されていません。タイプはカテゴリを表し、個別型またはマルチパート型にすることができます。サブタイプは、各タイプに固有のものです。

MIME タイプは大文字・小文字を区別しませんが、伝統的に小文字で記述されます。

個別型

text/plain
text/html
text/javascript
text/css
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/ecmascript
application/octet-stream
…

離散型は文書のカテゴリを示します。以下のいずれかを使用できます。

タイプ 説明 代表的なサブタイプの例
text テキストを含んでおり、理論上は人間が読める文書です。 text/plain, text/html, text/css, text/javascript, text/markdown
image なんらかの種類の画像です。動画は含まれませんが、アニメーションする画像 (アニメーション GIF など) は画像のタイプで表現されます。 image/gif, image/png, image/jpeg, image/bmp, image/webp, image/vnd.microsoft.icon
audio なんらかの種類の音声ファイルです。 audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video なんらかの種類の動画ファイルです。 video/webm, video/ogg
application なんらかの種類のバイナリデータ、特に実行されたり解釈されたりするものです。 application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf

特定のサブタイプを持たないテキスト形式文書は、 text/plain を使用するべきです。

同様に、特定あるいは既知のサブタイプを持たないバイナリ形式文書は、application/octet-stream を使用するべきです。

マルチパート型

multipart/form-data
multipart/byteranges

マルチパート型は、ふつうそれぞれ異なる MIME タイプを持つ複数の部品に分割される文書のカテゴリを示します。これは複合文書を表します。 HTTP は multipart/form-dataHTML フォームPOST メソッドで使用されたり、 multipart/byteranges が文書の一部を送信するために 206 Partial Content で使用されたりする例外を除いて、 HTTP はマルチパート文書を特定の方法で扱いません。メッセージは (おそらく文書をインラインで表示する方法がわからず、「名前を付けて保存」をすることを提案されるでしょうが) ブラウザーへ送信されます。

ウェブ開発者向けの重要な MIME タイプ

application/octet-stream

これは、バイナリファイルでは既定です。これは未知のバイナリ形式のファイルを表すものであり、ブラウザーはふつう実行したり、実行するべきか確認したりしません。これらは Content-Disposition ヘッダーの値に attachment が設定されたかのように扱い、「名前を付けて保存」ダイアログを提案します。

text/plain

これは、テキスト形式のファイルの既定です。実際には未知のテキスト形式のファイルを表すものではありますが、ブラウザーは表示可能であると推測します。

text/plain任意のテキスト形式データを表すものではありませんので注意してください。特定の種類のテキスト形式のデータを想定している場合は、おそらくそのとおりに判断されないでしょう。特に、CSS ファイルを宣言する <link> 要素から text/plain 形式のファイルをダウンロードすると、 text/plain で示されたファイルは正しい CSS ファイルであると認識されません。CSS の MIME タイプである text/css を使用しなければなりません。

text/css

ウェブページをスタイル付けするための CSS ファイルは text/css で送信することが必要です。サーバーが CSS ファイルについて .css の接尾辞を認識しない場合、 text/plainapplication/octet-stream の MIME タイプで送信することがあります。その場合、多くのブラウザーから CSS として認識されず、無視されることになります。

text/html

すべての HTML コンテンツは、このタイプで提供するべきです。 XHTML 向けの新たな MIME タイプ (application/xhtml+xml など) は、現在ではほぼ無用です。

メモ: XML の厳密な解釈ルールや、 <![CDATA[…]]> セクション、 HTML/SVG/MathML の名前空間に含まれない要素を使用したい場合は、 application/xml または application/xhtml+xml を使用してください。

text/javascript

HTML 標準の Scripting languages セクションは以下のように定めています。

サーバーは JavaScript リソースに対して text/javascript を使用してください。サーバーは JavaScript リソースに対して他の 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/jscript
  • text/livescript
  • text/x-ecmascript
  • text/x-javascript

画像タイプ

わずかな画像タイプのみが、ウェブページで使用することが安全であると広く認識されています。

MIME タイプ 画像タイプ
image/gif GIF 画像 (可逆圧縮、PNG が取って代わった)
image/jpeg JPEG 画像
image/png PNG 画像
image/svg+xml SVG 画像 (ベクター画像)
image/x-icon, image/vnd.microsoft.icon[1] Windows アイコン

WebP (image/webp) をこの一覧に加えるかという議論がありますが、ブラウザーベンダーは受け入れることに慎重です。

ウェブ文書には他の種類の画像もあります。例えば、多くのブラウザーはファビコンのために ICO 画像を image/x-icon の MIME タイプで対応しています。

脚注 1
image/vnd.microsoft.iconIANA に登録されているにもかかわらず、広く対応されておらず、代わりに image/x-icon が使用されています。

音声と動画のタイプ

画像と同じく、 HTML は <audio><video> 要素で対応している型を定義していないので、ウェブで使用することができるのは一部のみです。 HTML5 の audio と video 要素で対応しているメディア形式で、使用可能なコーデックやコンテナーを説明しています。

オーディオビジュアルファイルの MIME タイプはたいていコンテナー形式を表しています。ウェブでもっとも一般的なものは以下のとおりです。

MIME タイプ 音声または動画のタイプ
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav
WAVE コンテナー形式の音声ファイル。 PCM オーディオコーデック (WAVE コーデック "1") はたいていサポートされていますが、他のコーデックのサポートは (あるとしても) 限定的です。
audio/webm WebM コンテナー形式の音声ファイル。Vorbis や Opus がもっとも一般的な音声コーデックです。
video/webm WebM コンテナー形式の、おそらく音声も含む動画ファイル。VP8 や VP9 がもっとも一般的に使用される動画コーデックです。 Vorbis や Opus がもっとも一般的な音声コーデックです。
audio/ogg OGG コンテナー形式の音声ファイル。Vorbis が、このコンテナーでもっとも一般的に使用される音声コーデックです。
video/ogg OGG コンテナー形式の、おそらく音声も含む動画ファイル。通常の動画コーデックは Theora、音声コーデックは Vorbis です。
application/ogg OGG コンテナー形式を使用する音声または動画のファイル。通常の動画コーデックは Theora、音声コーデックは Vorbis です。

multipart/form-data

multipart/form-data タイプは、入力済みの HTML フォーム の内容をブラウザーからサーバーに送信するときに使用することができます。

これはマルチパート文書形式として複数の部分から成り、境界 (二重ダッシュ -- で始まる文字列) によって区切られます。それぞれの部分は固有のエンティティであり、固有の HTTP ヘッダーとして Content-Disposition やファイルアップロードのフィールドには Content-Type を持ちます。

Content-Type: multipart/form-data; boundary=aBoundaryString
(マルチパート文書全体に関連付けられる、他のヘッダー)

--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(データ)
--aBoundaryString
Content-Disposition: form-data; name="myField"

(データ)
--aBoundaryString
(サブパート)
--aBoundaryString--

以下の <form> があるとします。

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
  <label>Name: <input name="myTextField" value="Test"></label>
  <label><input type="checkbox" name="myCheckBox"> Check</label>
  <label>Upload file: <input type="file" name="myFile" value="test.txt"></label>
  <button>Send the file</button>
</form>

これは以下のメッセージを送信します。

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465

-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"

Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"

on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plain

Simple file.
-----------------------------8721656041911415653955004498--

multipart/byteranges

multipart/byteranges MIME タイプは、部分的なレスポンスをブラウザーへ返すために使用されます。

206 Partial Content ステータスコードを送信するとき、この MIME タイプは文書がいくつかの部分で構成されていることを示しており、それぞれのリクエストされた範囲のひとつになります。ほかのマルチパート型と同様に、 Content-Typeboundary を使用してそれぞれの部分を区切ります。それぞれの部分は実際のタイプを表す Content-Type ヘッダーと、表現している範囲を表す Content-Range ヘッダーを持ちます。

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 385

--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-200/1270

eta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="vieport" content
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 300-400/1270

-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: "Open Sans", "Helvetica
--3d6b6a416f9b5--

正しい MIME タイプを設定することの重要性

多くのウェブサーバーは未知の種類のリソースについて、既定の application/octet-stream MIME タイプを送ります。セキュリティ上の理由で、多くのブラウザーはこのようなリソースに既定のアクションを定義することを許可せず、リソースを使用するためにディスクへ保存することをユーザーに強制します。

以下のような誤ったサーバー設定がよく見られます。

  • RAR で圧縮されたファイル。この場合、元ファイルの実際の種類であることが理想です。これは、 .RAR ファイルがさまざまな種類の複数のリソースを含むことができるため、たいていは不可能です。この場合、サーバーが application/x-rar-compressed を送信するように設定してください。

  • 音声および動画。正しい MIME タイプを持つリソースだけが、 <video> または <audio> 要素で再生されます。音声および動画に対して正しい MIME タイプを使用するよう注意してください。

  • プロプライエタリーなファイルタイプ。特別な操作ができなくなるため、application/octet-stream の使用は避けてください。ほとんどのブラウザーは、この汎用的な MIME タイプに既定の動作 (「Word で開く」など) を定義することができません。 application/vnd.mspowerpoint のような特定の型ならば、ユーザーがそのようなファイルを自動的に選択したプレゼンテーションソフトウェアで開くことができます。

MIME スニッフィング

MIME タイプが欠落している、あるいは MIME タイプが誤って設定されているとクライアントが考えている場合に、ブラウザーは MIME スニッフィングを行います。これは、リソースを確認して正しい MIME タイプを推測します。

MIME スニッフィングはブラウザーによって異なる方法で、異なる状況下で行います。 (例えば、 Safari は受信した MIME タイプが合わない場合は、 URL のファイルの拡張子を見ます。) 実行可能なコンテンツを表す MIME タイプの一部には、セキュリティ上の懸念があります。サーバーは X-Content-Type-Options を送信することで、MIME スニッフィングを抑制できます。

文書形式を伝える他の方法

MIME タイプは、文書の種類の情報を伝える唯一の方法ではありません。

  • 特に Microsoft Windows では、ファイル名の拡張子を使用することがあります。拡張子に意味があるとは考えないオペレーティングシステムもありますし (Linux や Mac OS など)、正しいという保証はありません。
  • マジックナンバー。バイト構造を見ることで、様々な形式の構文によりファイルタイプを推測することができます。例えば GIF ファイルは16進数の値 47 49 46 38 39 (GIF89)、 PNG ファイルは 89 50 4E 47 (.PNG) で始まります。マジックナンバーを持たない種類のファイルもありますので、100%信頼できるシステムではありません。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: nekottyo, mfuji09, silverskyvicto, yyss
最終更新者: nekottyo,