Apache HTTP サーバ バージョン 2.0
Apache モジュール mod_negotiation
説明: | コンテントネゴシエーション 機能を提供する |
---|---|
ステータス: | Base |
モジュール識別子: | negotiation_module |
ソースファイル: | mod_negotiation.c |
概要
コンテントネゴシエーション、より正確にはコンテンツの選択機能は、 複数用意されているドキュメントから、クライアントの能力に一番合った ドキュメントを選択する機能です。この実装は二つあります。
- タイプマップ (
type-map
ハンドラで扱われるファイル)。これは variants を含んでいるファイルを明示的に指定します。 - MultiViews の探索 (
MultiViews
Option
で有効になります)。 サーバが暗黙の内にファイル名のパターンマッチを行ない、 その結果から選択します。
タイプマップ
タイプマップは RFC 822 のメールヘッダに類似した書式です。 ドキュメントの記述が空行で分離されて書かれていて、ハッシュ文字 ('#') で始まる行はコメントとして扱われます。 ドキュメントの説明は複数のヘッダレコードから構成されます。 レコードは、続きの行が空白で始まっていると複数の行にまたがります。 最初の空白が消去されて、前の行とつなげて 1 行として扱われます。 ヘッダレコードはキーワード名の後に値が続くという形式で、 キーワード名は常にコロンで終わります。空白はヘッダ名と値の間、 値のトークンの間に入れることができます。 使用可能なヘッダは以下のとおりです:
Content-Encoding:
- ファイルのエンコーディング。Apache は
AddEncoding
ディレクティブ で定義されたエンコーディングだけを認識します。通常 compress されたファイルのためのx-compress
と gzip されたファイルのためのx-gzip
を含みます。 エンコーディングの比較をするときは、接頭辞x-
は無視されます。 Content-Language:
- インターネット標準の言語タグ
(RFC 1766)
で定義されている言語の種類。例えば、
en
は英語を表します。 複数の言語が格納される場合はコンマで区切られます。 Content-Length:
- ファイルの長さ (バイト数)。 このヘッダがない場合、ファイルの実際の長さが使用されます。
Content-Type:
- ドキュメントの MIME
メディアタイプ、オプショナルなパラメータ付き。パラメータの構文は
name=value
で、メディアタイプや他のパラメータとはセミコロンで分離されます。 共通のパラメータは以下のとおり:level
- メディアタイプのバージョンを示す整数。
text/html
では 2 がデフォルトで、その他の場合は 0 がデフォルトです。 qs
- クライアントの能力に関係なく、variant
を他と比較したときの相対的な「品質」で、0.0 から 1.0
の範囲の浮動点小数。
例えば、写真を表現しようとしているときは普通は JPEG
ファイルの方が ASCII ファイルよりも高い品質になります。
しかし、リソースが ASCII アートで表現されているときは、ASCII
ファイルの方が JPEG
ファイルよりも高い品質になります。このように、
qs
はリソース毎に特有の値を取ります。
例
Content-Type: image/jpeg; qs=0.8
URI:
- (指定のメディアタイプ、コンテントエンコーディングの) variant の ファイルの uri. これは、マップファイルからの相対 URL として 解釈されます。同じサーバに存在しなければならず、クライアントが 直接リクエストしたときにアクセスを許可されるものでなければなりません。
Body:
- Apache 2.0 で新設されたこの Body ヘッダを使って、
リソースの実際の内容をタイプマップファイルに書くことができます。
このヘッダは本文の内容の区切りとなる文字列で始まる必要があります。
タイプマップファイルの続く行は、区切り文字列が見つかるまで、
リソースの本文になります。
Example:
Body:----xyz----
<html>
<body>
<p>Content of the page.</p>
</body>
</html>
----xyz----
MultiViews
MultiViews 探索は、Multiviews
Options
ディレクティブにより有効になります。
サーバが /some/dir/foo
へのリクエストを受け取り、/some/dir/foo
が存在
しない場合、サーバはディレクトリを読んで、
foo.*
にあてはまる全てのファイルを探し、
事実上それらのファイルをマップするタイプマップを作ります。
そのとき、メディアタイプとコンテントエンコーディングは、
そのファイル名を直接指定したときと同じものが割り当てられます。
それからクライアントの要求に一番合うものを選び、
そのドキュメントを返します。
ファイルを選択する際に、関連するコンテントネゴシエーションの
メタ情報を持たないファイルについて、判定を行うかどうかを
MultiViewsMatch
ディレクティブで設定します。
CacheNegotiatedDocs ディレクティブ
説明: | コンテントネゴシエーションされたドキュメントをプロキシサーバが キャッシュできるようにする |
---|---|
構文: | CacheNegotiatedDocs On|Off |
デフォルト: | CacheNegotiatedDocs Off |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_negotiation |
互換性: | バージョン 2.0で構文が変わりました |
このディレクティブが設定されていると、コンテントネゴシエーション をした結果のドキュメントのキャッシュを許可します。 これは、プロキシの後ろにいるクライアントが能力に一番合った ドキュメントではなく、 キャッシュをより効果的にするものを得る可能性があるということです。
このディレクティブは HTTP/1.0 ブラウザからのリクエスト のみに適用されます。HTTP/1.1 は、 交渉されたドキュメントのキャッシュに対してずっとよい制御が可能なので、 このディレクティブは HTTP/1.1 のリクエストには影響しません。
2.0 より前のバージョンでは、
CacheNegotiatedDocs
は引数を取らず、
ディレクティブが存在することで on の動作をしていました。
ForceLanguagePriority ディレクティブ
説明: | 要求に合う単独のドキュメントが見つからなかったときに行なうことを指定 |
---|---|
構文: | ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] |
デフォルト: | ForceLanguagePriority Prefer |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_negotiation |
互換性: | バージョン 2.0.30 以降で使用可能 |
ForceLanguagePriority
ディレクティブは
要求に合うドキュメントを一つだけ返すことができないときに、
LanguagePriority
ディレクティブを使ってネゴシエーションの結果を返します。
ForceLanguagePriority Prefer
は、同等の選択肢が
いくつかあるときに、HTTP の 300 (MULTIPLE CHOICES) を返す代わりに、
LanguagePriority
を使って一つだけドキュメントを返すように
します。以下のディレクティブが指定されていて、ユーザの Accept-Language
ヘッダでは en
と de
の品質が共に
.500
(同じくらい許容) であるときは、
最初にマッチする variant の en
が送られます。
LanguagePriority en fr de
ForceLanguagePriority Prefer
ForceLanguagePriority Fallback
では、HTTP 406
(NOT ACCEPTABLE) を送信する代わりに、
LanguagePriority
が正しい結果を送ります。
以下のディレクティブが指定されていて、ユーザの Accept-Language
が es
言語のみを許可していて、さらにそのような variant がないときには、
以下の LanguagePriority
のリストの最初の variant が送られます。
LanguagePriority en fr de
ForceLanguagePriority Fallback
Prefer
と Fallback
の両方のオプションを
同時に指定することができます。
ですから、複数の variant があるときは
LanguagePriority
の最初の
variant が送られ、クライアントの許容言語に合う vaiant がないときは
存在するドキュメントで最初のものが送られる、という様にすることができます。
参照
LanguagePriority ディレクティブ
説明: | クライアントが優先度を示さなかったときの言語の variant の優先度を 指定 |
---|---|
構文: | LanguagePriority MIME-lang [MIME-lang]
... |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_negotiation |
LanguagePriority
は、MultiViews
リクエストを扱うときに、クライアントが優先順位を提供していない場合の
言語の優先順位を設定します。MIME-lang
のリストが優先度の降順に並びます。
Example:
LanguagePriority en fr de
foo.html
がリクエストされ、foo.html.fr
と foo.html.de
が両方存在し、
ブラウザが言語の優先順位を提供してない場合は
foo.html.fr
が返されます。
このディレクティブは他の方法で「最善」
の言語が決定できないときか、ForceLanguagePriority
ディレクティブが
None
以外のときにのみ効果があることに注意してください。
一般的には、サーバ側ではなくクライアント側で好みの言語を決定します。