MIME と Content-Type
○MIME
Webの世界では拡張子という概念と、もうひとつ『MIMEタイプ』という概念があります。MIMEタイプとは「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間はこのMIMEタイプを用いてデータの形式を指定しています。例えばMIMEタイプには以下のようなものがあります。
ファイル形式 | 一般的な拡張子 | MIMEタイプ |
テキスト | .txt | text/plain |
HTML文書 | .htm .html | text/html |
XML文書 | .xml | text/xml |
JavaScript | .js | text/javascript |
ブラウザが xx.gif というファイルをWEBサーバーに要求する際、WEBサーバーはxx.gifの内容(データ)を「これは image/gif タイプのデータです」と言いながら返却してくれます。これにより、ブラウザは受け取ったデータを正常に処理することができるのです。
しかし、Internet Explorer などのブラウザでは、この MIMEタイプの情報を無視して拡張子の方を信用したり、MIMEタイプや拡張子を無視してファイルの中身を見て「text/plain と言っているけど、これは HTML文書みたいだから、HTMLとして表示してあげるね」と、いらぬお節介をするブラウザもあり、なかなか、期待通りには制御できないのが実状のようです。
■ MIMEタイプの設定方法
WEBサーバーによって設定方法は異なるのですが、現在最もよく使用されている Apache というWEBサーバーでは、.htaccess というファイルによってMIMEタイプを指定します。データ(xxx.htmlなど)と同じディレクトリ(フォルダ)に .htaccess という名前のファイルを用意して、その中身を
AddType text/html .html
としておけば、WEBサーバーは、「.html という拡張子のファイルは text/html というMIMEタイプのデータとして送信する」という処理を行ってくれます。
http://www.tohoho-web.com/wwwxx015.htm
○Content-Type
HTTPレスポンスヘッダにはContent-Typeエンティティヘッダフィールドという部分があります。 例えばHTMLファイル(*.htmlもしくは*.htm)を送信する際にWebサーバは通常、次のようにヘッダを送信します。
Content-Type: text/html;
そう、※文字コード宣言をHTMLで行う場合はこのヘッダにcharsetに指定されていない場合に、 それを補填するためにmeta要素で記述していたのです。
※文字コード宣言をHTMLで行う場合
保存する時の文字コードとブラウザが読みとる時に使う文字コードが違っていると文字化けが発生してしまいます。 これは一部の符号化方式を除き、そのファイルがどのような文字コードで保存されたものなのかをブラウザが判別できる確実な手段が無いために発生します。 しかし、そのHTMLファイルの作者がブラウザに対してどのような文字コードで保存したのかを明示することによってブラウザは確実に表示できるようになります。 それが文字コードの宣言です。文字コードは次のようにmetaタグを使って宣言します。
ISO-2022-JP(いわゆるJIS)