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

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

重要:ブラウザーは URL を処理する方法を決定するために、ファイル拡張子ではなく MIME タイプを使用しますので、ウェブサーバーは正しい MIME タイプをレスポンスの Content-Type ヘッダーで送信することが重要です。これが正しく構成されていないと、ブラウザーはファイルの中身を誤って解釈し、サイトが正しく動作しなかったり、ダウンロードファイルが誤って扱われたりすることがあります。

MIME タイプの構造

もっとも単純な MIME タイプはタイプサブタイプで構成されます。これらはどちらも文字列で、その間をスラッシュ (/) で接続し、 MIME タイプを構成します。ホワイトスペースは MIME タイプでは許可されていません。

タイプ/サブタイプ

タイプはデータ型が当てはまる全般的なカテゴリ、すなわち videotext.などを表します。サブタイプは、その MIME タイプが表す正確なデータの種類を識別します。例えば、 MIME タイプが text の場合、サブタイプは plain (プレインテキスト)、 html (HTML ソースコード)、 calendar (iCalendar/.ics) ファイルなどです。

すべてのタイプは利用可能なサブタイプを持っており、 MIME タイプは常にタイプとサブタイプの両方を持ち、一方だけで使われることはありません。

任意で引数を追加して、追加の詳細情報を提供することができます。

タイプ/サブタイプ;引数=

例えば、 MIME タイプのうちメインタイプが text であるものでは、任意で charset 引数を使用して、データ内の文字の文字コードを指定することができます。 charset が指定されない場合は、既定では ASCII (US-ASCII) が、ユーザーエージェントの設定で上書きされない限り使われます。 UTF-8 のテキストファイルを指定するには、 MIME タイプとして text/plain;charset=UTF-8 が使用されます。

MIME タイプは大文字・小文字が区別されませんが、大文字・小文字の区別が特定の意味を持つ可能性がある引数の値を除いて、伝統的に小文字で記述されます。

タイプ

タイプには個別型 (discrete

) とマルチパート型 (multipart

) の二種類があります。個別型は単一のファイルまたはメディアを表すタイプで、単一のテキストファイルや音楽ファイル、単一の映像などです。マルチパート型は複数のコンポーネント部品によって構成される文書を表すもので、それぞれの部分が固有の MIME タイプを持ちます。また、マルチパート型は一度のトランザクションで一緒に送信される複数のファイルをまとめることもできます。例えば、マルチパート MIME 型は複数のファイルを電子メールに添付するときに使用されます。

個別型

現在 IANA に登録されている個別型は以下のとおりです。

applicationIANA での一覧
他のタイプに明確に当てはまらない、あらゆる種類のバイナリデータです。何らかの方法で実行されたり解釈されたりするデータ、または利用するのに特定のアプリケーションや特定の種類のアプリケーションを必要とするバイナリデータのどちらかです。汎用的なバイナリデータ (または本当のタイプが不明なバイナリデータ) は application/octet-stream です。他のよくある例として、 application/pdf, application/pkcs8, application/zip があります。
audio IANA での一覧
音声または音楽データです。例えば、 audio/mpeg, audio/vorbis などがあります。
example
MIME タイプの使用方法を例示する際のプレイスホルダーとして使用するために予約されています。これらはサンプルコードのリストや文書の外で使用してはいけません。 example はサブタイプとして使用することもできます。例えば、ウェブ上で音声として動作する例として、 MIME タイプの audio/example を使用してタイプがプレイスホルダーであり、実世界で使用されるコードでは適切なもので置き換えられることを表します。
font IANA での一覧
フォントやタイプフェイスのデータです。よく使われるものとしては font/woff, font/ttf, font/otf などがあります。
image IANA での一覧
画像またはグラフィックデータで、ビットマップとベクター静止画像の両方を含み、さらに静止画像形式のアニメーション版であるアニメーション GIF や APNG なども含みます。よく使われるものとしては、 image/jpeg, image/png, image/svg+xml などがあります。
model IANA での一覧
三次元のオブジェクトやシーンなどのモデルデータです。例えば、 model/3mfmodel/vml などがあります。
text IANA での一覧
テキストのみのデータで、人間が読むことができるあらゆるコンテンツ、ソースコード、コンマ区切り値 (CSV) 形式のデータのようなテキストデータを含みます。例えば、 text/plain, text/csv, text/html などがあります。
video IANA での一覧
動画のデータまたはファイルで、 MP4 movies (video/mp4) などがあります。

特定のサブタイプを持たないテキスト形式の文書には、 text/plain を使用してください。同様に、特定のサブタイプまたは既知のサブタイプを持たないバイナリ形式の文書には、 application/octet-stream を使用してください。

マルチパート型

マルチパート型は、ふつうそれぞれ異なる MIME タイプを持つ複数の部品に分割される文書のカテゴリを示します。これらは、特に電子メールにおいて、同じトランザクションの一部である複数の別々のファイルを表すためにも使用されます。これらは複合文書を表します。

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

マルチパート型は二種類があります。

message IANA での一覧
A message that encapsulates other messages. This can be used, for instance, to represent an email that includes a forwarded message as part of its data, or to allow sending very large messages in chunks as if it were multiple messages. Examples include message/rfc822 (for forwarded or replied-to message quoting) and message/partial to allow breaking a large message into smaller ones automatically to be reassembled by the recipient.
multipart IANA での一覧
Data that is comprised of multiple components which may individually have different MIME types. Examples include multipart/form-data (for data produced using the FormData API) and multipart/byteranges (defined in RFC 7233: 5.4.1 and used with HTTP's 206 "Partial Content" response returned when the fetched data is only part of the content, such as is delivered using the Range header).

ウェブ開発者向けの重要な 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 仕様書では、 JavaScript ファイルは MIME タイプとして常に text/javascript を使用することになっています。他の値は妥当であると見なされず、これらを使用するとスクリプトが読み込まれなかったり、実行されなかったりする結果になる可能性があります。

メモ: これは、 text/javascript は非推奨で代わりに application/javascript を使用するという IANA 標準に直接矛盾しています。しかし、 application/javascript はウェブコンテンツには正しくなく、使用するべきではありません。

歴史的な理由で、 MIME スニッフィング標準 (ブラウザーがメディアタイプをどのように解釈し、有効なタイプを持たないコンテンツをどう処理するかを定義する方法の定義) は、 JavaScript を以下のいずれかと基本的に一致する 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   

Note: Even though any given user agent may support any or all of these, you should only use text/javascript. It's the only MIME type guaranteed to work now and into the future.

Some content you find may have a charset parameter at the end of the text/javascript media type, to specify the character set used to represent the code's content. This is not valid, and in most cases will result in a script not being loaded.

画像タイプ

Files whose MIME type is image contain image data. The subtype specifies which specific image file format the data represents. Only a few image types are used commonly enough to be considered safe for use on web pages:

MIME タイプ 画像タイプ
image/gif GIF 画像 (可逆圧縮。 PNG が取って代わった。基本的なアニメーションの対応あり)
image/jpeg JPEG 画像
image/png PNG 画像
image/webp1 WebP 画像
image/svg+xml SVG 画像 (拡大縮小できるベクター画像)
image/x-icon, image/vnd.microsoft.icon2 Windows アイコン

[1] The WebP image format (image/webp) is relatively new. Nearly all major browsers now support it, the sole exception being Safari. If you choose to use WebP, you should consider providing a fallback using one of the other types. To do this, display the image using the <picture> element, with <source> child elements for both the WebP image and for the fallback image.

[2] Despite image/vnd.microsoft.icon being registered with IANA, it is largely unsupported, and image/x-icon is being used instead.

音声と動画のタイプ

画像と同じく、 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%信頼できるシステムではありません。

関連情報

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

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