Apache HTTP サーバ バージョン 2.2
This document refers to the 2.2 version of Apache httpd, which is no longer maintained. The active release is documented here. If you have not already upgraded, please follow this link for more information.
You may follow this link to go to the current version of this document.
説明: | コンテントネゴシエーション 機能を提供する |
---|---|
ステータス: | Base |
モジュール識別子: | negotiation_module |
ソースファイル: | mod_negotiation.c |
コンテントネゴシエーション、より正確にはコンテンツの選択機能は、 複数用意されているドキュメントから、クライアントの能力に一番合った ドキュメントを選択する機能です。この実装は二つあります。
type-map
ハンドラで扱われるファイル)。これは variants
を含んでいるファイルを明示的に指定します。MultiViews
Option
で有効になります)。
サーバが暗黙の内にファイル名のパターンマッチを行ない、
その結果から選択します。タイプマップは RFC 822 のメールヘッダに類似した書式です。 ドキュメントの記述が空行で分離されて書かれていて、ハッシュ文字 ('#') で始まる行はコメントとして扱われます。 ドキュメントの説明は複数のヘッダレコードから構成されます。 レコードは、続きの行が空白で始まっていると複数の行にまたがります。 最初の空白が消去されて、前の行とつなげて 1 行として扱われます。 ヘッダレコードはキーワード名の後に値が続くという形式で、 キーワード名は常にコロンで終わります。空白はヘッダ名と値の間、 値のトークンの間に入れることができます。 使用可能なヘッダは以下のとおりです:
Content-Encoding:
AddEncoding
ディレクティブ
で定義されたエンコーディングだけを認識します。通常 compress
されたファイルのための x-compress
と gzip
されたファイルのための x-gzip
を含みます。
エンコーディングの比較をするときは、接頭辞 x-
は無視されます。Content-Language:
en
は英語を表します。
複数の言語が格納される場合はコンマで区切られます。Content-Length:
Content-Type:
name=value
で、メディアタイプや他のパラメータとはセミコロンで分離されます。
共通のパラメータは以下のとおり:
level
text/html
では 2 がデフォルトで、その他の場合は
0 がデフォルトです。qs
qs
はリソース毎に特有の値を取ります。
Content-Type: image/jpeg; qs=0.8
URI:
Body:
Body:----xyz----
<html>
<body>
<p>Content of the page.</p>
</body>
</html>
----xyz----
MultiViews 探索は、Multiviews
Options
ディレクティブにより有効になります。
サーバが /some/dir/foo
へのリクエストを受け取り、/some/dir/foo
が存在
しない場合、サーバはディレクトリを読んで、
foo.*
にあてはまる全てのファイルを探し、
事実上それらのファイルをマップするタイプマップを作ります。
そのとき、メディアタイプとコンテントエンコーディングは、
そのファイル名を直接指定したときと同じものが割り当てられます。
それからクライアントの要求に一番合うものを選び、
そのドキュメントを返します。
ファイルを選択する際に、関連するコンテントネゴシエーションの
メタ情報を持たないファイルについて、判定を行うかどうかを
MultiViewsMatch
ディレクティブで設定します。
説明: | コンテントネゴシエーションされたドキュメントをプロキシサーバが キャッシュできるようにする |
---|---|
構文: | CacheNegotiatedDocs On|Off |
デフォルト: | CacheNegotiatedDocs Off |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_negotiation |
互換性: | バージョン 2.0で構文が変わりました |
このディレクティブが設定されていると、コンテントネゴシエーション をした結果のドキュメントのキャッシュを許可します。 これは、プロキシの後ろにいるクライアントが能力に一番合った ドキュメントではなく、 キャッシュをより効果的にするものを得る可能性があるということです。
このディレクティブは HTTP/1.0 ブラウザからのリクエスト のみに適用されます。HTTP/1.1 は、 交渉されたドキュメントのキャッシュに対してずっとよい制御が可能なので、 このディレクティブは HTTP/1.1 のリクエストには影響しません。
2.0 より前のバージョンでは、
CacheNegotiatedDocs
は引数を取らず、
ディレクティブが存在することで on の動作をしていました。
説明: | 要求に合う単独のドキュメントが見つからなかったときに行なうことを指定 |
---|---|
構文: | 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 がないときは
存在するドキュメントで最初のものが送られる、という様にすることができます。
説明: | クライアントが優先度を示さなかったときの言語の variant の優先度を 指定 |
---|---|
構文: | LanguagePriority MIME-lang [MIME-lang]
... |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_negotiation |
LanguagePriority
は、MultiViews
リクエストを扱うときに、クライアントが優先順位を提供していない場合の
言語の優先順位を設定します。MIME-lang
のリストが優先度の降順に並びます。
LanguagePriority en fr de
foo.html
がリクエストされ、foo.html.fr
と foo.html.de
が両方存在し、
ブラウザが言語の優先順位を提供してない場合は
foo.html.fr
が返されます。
このディレクティブは他の方法で「最善」
の言語が決定できないときか、ForceLanguagePriority
ディレクティブが
None
以外のときにのみ効果があることに注意してください。
一般的には、サーバ側ではなくクライアント側で好みの言語を決定します。