MIME
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に働きかけます。