World Wide Web Guide

MIMEとは

MIME(Multipurpose Internet Mail Extension)は、1992年にIETFによって提唱されたバイナリデータも添付ファイルとして送れるようにした規格です。MIMEはメールだけでなく、ウェブサーバとUAがデータを送受信する際に使われているHTTPプロトコルにも活用されています。ウェブ上で利用されるファイルには、拡張子(識別子)があり、拡張子とファイルのデータ型(データの種類)の関連付けを担っているのがMIMEタイプです。

MIMEタイプの構成

MIMEタイプは拡張子とファイルのデータ型(データの種類)を関連付けるもので、WWWの世界では別名をMediaタイプと呼ぶこともあります。「タイプ名/サブタイプ名」の形式で構成されており、たとえばHTMLファイルとして読み取ることになるデータ型は、"text/html" です。"text" の部分がMIMEタイプと呼ばれ、"html" の部分がMIMEサブタイプと呼ばれます。タイプ名とサブタイプ名の間は、常にスラッシュ(/)で区切られています。一つのタイプ名には多数のサブタイプ名が定義されています。しかし、"html" のようなサブタイプ名の部分は限定的です。

よく利用するMIMEタイプ例

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ファイル側でも設定することがある身近なものです。たとえば、HTMLファイル側に記述してあるだけでHTTPヘッダの追加情報としてUAに働きかけるHTMLのオプションには次のようなものがあります。

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に働きかけることが期待されます。

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

MIMEタイプの設定ファイル

Apacheでは、MIMEタイプはhttpd.confファイルのTypesConfigに指定されているファイル(mime.typesファイル)を閲覧すれば、どのようなタイプの拡張子が既定されているかを確認することができます。デフォルトではmime.typesファイルが設定されています。

TypesConfig /www/conf/mime.types

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

たとえば、.html, .htmの拡張子は、通常text/htmlですが、これをXHTML1.1の規格で作成したXHTML文書としてapplication/xhtml+xmlのMIMEタイプで提供すようにしたい場合は、.htaccessに次のように記述します。

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

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

MIMEに関するディレクティブ

DefaultType MIME-type
デフォルトのMIMEタイプを設定する
AddDefaultCharset On|Off|charset
デフォルトのMIME文字セットを設定する
DefaultLanguage MIME-lang
デフォルトのMIME言語を指定する
ForceType MIME-type|None
MIMEタイプを強制的に設定する
AddType MIME-type extension
特定の拡張子にMIMEタイプを設定する
AddCharset charset extension
特定の拡張子にMIME文字セットを設定する
AddEncoding MIME-enc extension
特定の拡張子にMIMEエンコーディングを設定する
AddLanguage MIME-lang extension
特定の拡張子にMIME言語を設定する
RemoveType extension
特定の拡張子のMIMEタイプ定義を無効にする
RemoveCharset extension
特定の拡張子のMIME文字セットを無効にする
RemoveEncoding extension
特定の拡張子に設定したMIMEエンコーディングを無効にする
RemoveLanguage extension
特定の拡張子に設定したMIME言語を解除する
MimeMagicFile file-path
ファイル内容によってMIMEタイプを設定する
TypesConfig file-path
MIMEタイプの設定ファイルを指定する