Updated / Published

MIME(Multipurpose Internet Mail Extension)は、従来の電子メールにあった最大文字数やASCIIコードしか送信することができないといった制限を取り除くために、1992年にIETFによって電子メールでさまざまなフォーマット(書式)を扱えるようにする規格として提唱されました。メールだけでなく、ウェブサーバとUAがデータを送受信する際に使われているHTTPプロトコルにも活用されています。ウェブ上で利用されるファイルには、拡張子(識別子)があり、拡張子によって、そのファイルがどのデータ型(データの種類)であるかを示しているのがMIMEです。

MIMEも他の通信プロトコルと同様、ヘッダとデータ本体と言うフィールド構造になっており、データ型(データの種類)を記述するために Content-Type というフィールドが用意されています。Content-Typeフィールドの記述は「タイプ名/サブタイプ名」の形式で構成します。たとえばHTMLファイルとして読み取ることになるデータ型は、"text/html" と記述します。"text" の部分がMIMEタイプと呼ばれ、"html" の部分がMIMEサブタイプと呼ばれます。タイプ名とサブタイプ名の間は、常にスラッシュ(/)で区切られています。一つのタイプ名には多数のサブタイプ名が定義されています。しかし、"html" のようなサブタイプ名の部分は限定的です。

MIMEの設定ファイル

ウェブサーバには、様々な拡張子のMIMEを設定しているファイルが存在します。ここでは、UNIX系OSの多くが採用しているApacheウェブサーバに絞って説明をします。Apacheではhttpd.confファイルのTypesConfigに指定されているファイル(mime.typesファイル)を閲覧することで、どの拡張子にどのようなデータ型が既定されているかを確認することができます。おそらくデフォルトではmime.typesファイルが設定されています。

TypesConfig /www/conf/mime.types

もし、新たなMIMEを追加したい場合や既定の拡張子に対するMIMEを変更したい場合はmime.typesファイルを直接編集するか、.htaccessファイルによる上書きが有効であればAddTypeディレクティブを使用して上書きすることができます。

たとえば、.html, .htmの拡張子は、通常text/htmlですが、これをapplication/xhtml+xmlのMIMEで提供すようにしたい場合は、.htaccess に次のように記述します。

AddType "application/xhtml+xml; charset=utf-8" html htm

これにより.html、または.htmを拡張子にもつファイルがリクエストされた場合、ウェブサーバはapplication/xhtml+xmlのMIMEとして、かつutf-8の文字コードとして配信します。

よく利用するContent-Type例

text/html
HTMLファイル(拡張子例:.html, .htm
text/xml
XMLファイル(拡張子例:.xml
text/css
CSSファイル(拡張子例:.css
text/javascript
JavaScriptファイル(拡張子例:.js
text/plain
単純テキストファイル(拡張子例:.txt
image/gif
GIF画像ファイル(拡張子例:.gif
image/jpeg
JPEG画像ファイル(拡張子例:.jpg, .jpeg
image/png
PNG画像ファイル(拡張子例:.png
video/mpeg
MPEG映像ファイル(拡張子例:.mpg
video/x-msvideo
Microsoft AVIファイル(拡張子例:.avi
application/pdf
Adobe PDFファイル(拡張子例:.pdf
application/msword
Microsoft Wordファイル(拡張子例:.doc, .docx

HTML文書で設定することのあるMIME

MIMEはウェブサーバ側だけでなく、HTMLファイル側でも設定することがあり、正しくデータの伝送が行えるように事前にUAに働きかける指定をします。

accept属性

accept属性は、form要素, input要素に指定することができます。input要素の type属性に "file" が指定されている場合に、ウェブサーバ側が受け取ることのできるMIMEを事前に限定するようにUAに働きかけます。たとえば、CGIプログラムに画像ファイルのみをアップロードできるようにする場合には、次のように記述します。

<input name="imgfile" type="file" accept="image/gif,image/jpeg,image/png">

この設定により、ユーザのローカルから"image/gif", "image/jpeg", "image/png" のMIMEファイルのみを選択できるようなインターフェイスを提供するように UA に働きかけます(input要素accept属性を実装することになったのは、HTML5仕様実装UA以降です)。

codetype属性

codetype属性は、object要素に指定することができます。codetype属性に指定されたMIMEは、object要素の classid属性で指定されたオブジェクトを実行する前に事前に、そのUAの環境下で実行可能かどうかを判断をつけるように働きかけます。

content属性

content属性は、meta要素に指定することができます。meta要素の http-equiv属性で指定された Content-Type, Content-Style-Type, Content-Script-Typeの各値にMIMEを指定します。たとえば、http-equiv="Content-Type" content="text/html; charset=utf-8"であれば、ウェブページのMIMEは "text/html" で、文字コードは "utf-8" として読み込むようにUAに働きかけることになります。

enctype属性

enctype属性は、form要素に指定することができます。フォームに入力されたデータをウェブサーバに送信する際に、enctype属性で指定されたMIMEの形式にあわせて、データのエンコード(符号化)を行ったり、アップロードされるファイルにファイル名を付けたり、文字化けの起きないように Content-Typeヘッダに charsetパラメータをつけるなどの処理を行うようにUAに働きかけます。

type属性

type属性は、a要素, link要素, object要素, param要素, script要素, style要素に指定することができます。

  • a要素, link要素の type属性は、リンク先のリソース(情報資源)の MIMEをUAが正しく解釈できるように働きかけます。
  • object要素の type属性は data属性で指定されているオブジェクトのMIMEタイプをUAがサポートしていない場合に、指定されたオブジェクトを実行する前に事前にデータをロードすることのないように働きかけます。
  • param要素の type属性は、param要素の value属性にオブジェクトの所在である URI が指定された場合に、type属性に指定された MIMEで、指定されている URI のオブジェクトを発見するようにUAに働きかけます。
  • script要素, style要素の type属性は、それぞれスクリプト言語とスタイル言語に何を使用しているかを MIMEで示し、これを正しく解釈できるようにUAに働きかけます。