Apache HTTP サーバ バージョン 2.4
説明: | リクエストされたファイルの拡張子とファイルの振る舞い (ハンドラとフィルタ)、内容 (MIME タイプ、言語、文字セット、エンコーディング) とを関連付ける |
---|---|
ステータス: | |
モジュール識別子: | mime_module |
ソースファイル: | mod_mime.c |
このモジュールは拡張子を使っていろいろな「メタ情報」をファイルに
関連付けるために使用されます。この情報はドキュメントのファイル名と
MIME タイプ、言語、文字セット、エンコーディングとを関連付けます。
この情報はブラウザに送られますし、複数のファイルの中からユーザの好みの
ものが選ばれるように、コンテントネゴシエーションでも使われます。
コンテントネゴシエーション
に関する詳しい情報は mod_negotiation
をご覧下さい。
AddCharset
ディレクティブ、
AddEncoding
ディレクティブ、
AddHandler
ディレクティブ、
AddLanguage
ディレクティブ、
AddType
ディレクティブはすべて、
ファイルの拡張子をメタ情報にマップするために使用されます。
それぞれ、ドキュメントの文字セット (訳注: charset)、content-encoding,
content-language, MIME タイプ (content-type) を設定します。
TypesConfig
ディレクティブは拡張子を
MIME タイプにマップするファイルを指定するために使用されます。
さらに、mod_mime
はコンテンツを作成、処理する
ハンドラ と フィルタ
を設定することができます。AddHandler
ディレクティブ、AddOutputFilter
ディレクティブ、AddInputFilter
ディレクティブは
ドキュメントを扱うモジュールやスクリプトを制御します。
MultiviewsMatch
ディレクティブは
これらのディレクティブが指定したファイルの拡張子を
mod_negotiation
が Multiviews のマッチをとるときに
考慮するようにできます。
mod_mime
はメタ情報をファイル名と関連付けますが、
core
サーバにはあるコンテナ
(たとえば, <Location>
, <Directory>
, <Files>
) の中のすべてのファイルを特定の
メタ情報と関連付けるディレクティブがあります。これらのディレクティブには
ForceType
, SetHandler
, SetInputFilter
, SetOutputFilter
があります。
コアのディレクティブは mod_mime
により定義された
ファイル名の拡張子のマッピングすべてを上書きします。
ファイルのメタ情報を変えても Last-Modified
ヘッダの値は変わらないことに注意してください。ですから、
それらを変更した場合は、クライアントやプロキシで以前にキャッシュされた
コピーがそのときのヘッダとともに使われる可能性があります。
メタ情報 (言語、コンテントタイプ、文字セット、エンコーディング) を
変更したときは、すべての訪問者が正しいコンテントヘッダを
受け取るように、影響を受けるファイルに 'touch' コマンドを実行する
(最終更新日を更新する) 必要があるかもしれません。
ファイルは複数の拡張子を持つことができ、拡張子の順番は通常は関係ありません。例えば、ファイル welcome.html.fr
がコンテントタイプは text/html
に、言語はフランス語にマップされる場合、welcome.fr.html
もまったく同じ情報にマップされます。
同じメタ情報にマップされる拡張子が複数あるときには、言語と
コンテントエンコーディングを除いて、
右側にあるものが使用されます。たとえば、.gif
が MIME タイプ image/gif
にマップされ、.html
が MIME タイプ text/html
にマップされる場合は、ファイル welcome.gif.html
は
MIME タイプ text/html
に関連付けられます。
リソースに複数の言語やエンコーディングを関連付けること
ができるため、
言語とコンテントエンコーディングは前のものに追加されていきます。
たとえば、ファイル welcome.html.en.de
は
Content-Language: en, de
と Content-Type:
text/html
として送信されます。
複数の拡張子のあるファイルが MIME
タイプとハンドラの両方に関連付けられているときは注意する必要があります。
その場合、普通はリクエストがハンドラに関連付けられた
モジュールによって扱われることになります。たとえば、拡張子
.imap
が (mod_imagemap
の) imap-file
にマップされていて、.html
が MIME タイプ text/html
にマップされているときは、ファイル world.imap.html
は
imap-file
ハンドラと text/html
MIME
タイプに関連付けられます。ファイルが処理されるときは imap-file
ハンドラが使用されますので、そのファイルは mod_imagemap
のイメージマップファイルとして扱われることになります。
ファイル名のドット区切りでの最後の部分を使って、
特定の部分のメタデータにマッピングしたい場合は、
Add*
ディレクティブは使わないでください。
たとえば foo.html.cgi
を CGI スクリプトとして処理したいけれども、
bar.cgi.html
は CGI スクリプトとしては処理したくない場合、
AddHandler cgi-script .cgi
とする代わりに
次のようにしてください
<FilesMatch \.cgi$>
SetHandler cgi-script
</FilesMatch>
特定の MIME タイプ
のファイルはインターネットでの転送を簡単にするために、
さらに符号化することができます。これは通常は gzip
の
ような圧縮のことを指しますが、pgp
のような暗号化や、
バイナリファイルを ASCII (テキスト) 形式で送るために考案された
UUencoding のことを指すこともあります。
HTTP/1.1 RFC 14.11 節では次のように記述されています。
Content-Encoding エンティティヘッダフィールドはメディアタイプの 修飾子として使われます。それが存在していれば、値はエンティティボディに どの追加の符号化が適用されたかを示し、Content-Type ヘッダフィールドに 書かれているメディアタイプを得るためにどの復号機構を適用すべきか、も 示していることになります。Content-Encoding は主に、元のメディアタイプの 同一性を失うことなくドキュメントを圧縮することを可能にするために 使用されます。
複数のファイル拡張子 (複数の拡張子については 上の節 を参照) 使うことで、 ファイルのタイプやエンコーディングを指定することが できます。
たとえば、Microsoft Word のドキュメントがあり、サイズを小さくするために
pkzip されているとします。.doc
拡張子が Microsoft Word の
ファイルタイプと関連付けられていて、.zip
拡張子が
pkzip ファイルエンコーディングと関連付けられていると、ファイル
Resume.doc.zip
は pkzip された Word ドキュメントである
ということがわかります。
クライアントのブラウザにエンコーディング方法を知らせるために、
Apache はリソースと共に Content-Encoding
ヘッダを
送ります。
Content-encoding: pkzip