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