1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>コンテントネゴシエーション - Apache HTTP サーバ</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
12 <script src="./style/scripts/prettify.js" type="text/javascript">
15 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p>
18 <p class="apache">Apache HTTP サーバ バージョン 2.5</p>
19 <img alt="" src="./images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
22 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="./">バージョン 2.5</a></div><div id="page-content"><div id="preamble"><h1>コンテントネゴシエーション</h1>
24 <p><span>翻訳済み言語: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
26 <a href="./ja/content-negotiation.html" title="Japanese"> ja </a> |
27 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
28 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
30 <div class="outofdate">この日本語訳はすでに古くなっている
32 最近更新された内容を見るには英語版をご覧下さい。
36 <p>Apache は HTTP/1.1 の規格に記述されているコンテントネゴシエーションを
39 言語、文字セット、エンコーディングの優先傾向に基づいて、
41 また、不完全なネゴシエーション情報を送ってくるブラウザからのリクエストを
42 もっと賢く取り扱えるよう、いくつか機能も実装してあります。</p>
45 <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
46 モジュールによって提供されていて、デフォルトで組み込まれています。</p>
48 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">コンテントネゴシエーションについて</a></li>
49 <li><img alt="" src="./images/down.gif" /> <a href="#negotiation">Apache におけるネゴシエーション</a></li>
50 <li><img alt="" src="./images/down.gif" /> <a href="#methods">ネゴシエーション方法</a></li>
51 <li><img alt="" src="./images/down.gif" /> <a href="#better">品質の値を変える</a></li>
52 <li><img alt="" src="./images/down.gif" /> <a href="#extensions">Transparent Content Negotiation
54 <li><img alt="" src="./images/down.gif" /> <a href="#naming">リンクと名前の変換に関する注意点</a></li>
55 <li><img alt="" src="./images/down.gif" /> <a href="#caching">キャッシュに関する注意事項</a></li>
56 </ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
57 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
59 <h2><a name="about" id="about">コンテントネゴシエーションについて</a></h2>
61 <p>リソースは、幾つか異なった表現で利用できる場合があります。
63 またはそれらの組み合わせで利用できるかも知れません。
64 もっとも適した選択をする方法の一つには、インデックスページを
65 ユーザに見せて、ユーザに選んでもらう方法があります。
66 しかし、サーバが自動的に選ぶことができる場合が多くあります。
68 どの表現を嗜好するかという情報を送ることで動作しています。
69 例えばブラウザは、可能ならフランス語で情報を見たい、
72 ブラウザはリクエストのヘッダで自分の優先傾向を知らせます。
73 フランス語のみの表現を要求する場合は、ブラウザは次を送ります。</p>
75 <div class="example"><p><code>Accept-Language: fr</code></p></div>
77 <p>この優先傾向は、選択可能な表現が存在して、
78 言語によって様々な表現がある場合にのみ適用される
81 <p>もっと複雑なリクエストの例を挙げましょう。
82 このブラウザはフランス語と英語を受け付ける、しかしフランス語を好む、
84 プレインテキストや他のタイプよりは HTML を好む、
85 他のメディアタイプよりは GIF や JPEG を好む、しかし最終手段として
86 他のメディアタイプも受け付ける、と設定されています。</p>
88 <div class="example"><p><code>
89 Accept-Language: fr; q=1.0, en; q=0.5<br />
90 Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
93 <p>Apache は HTTP/1.1 規格で定義されている 'server
94 driven' コンテントネゴシエーションをサポートしています。
95 <code>Accept</code>, <code>Accept-Language</code>,
96 <code>Accept-Charset</code>, <code>Accept-Encoding</code>
97 リクエストヘッダを完全にサポートしています。Apache は
98 'transparent' コンテントネゴシエーションもサポートしていますが、
99 これは RFC 2295 と RFC 2296 で定義されている試験的な
101 これらの RFCで定義されている 'feature negotiation'
104 <p><strong>リソース</strong>とは URI
105 で特定される概念上のもののことです (RFC 2396)。 Apache
106 のような HTTP サーバは、その名前空間の中での
107 リソースの<strong>表現</strong>へのアクセスを提供します。
109 定義されたメディアタイプ、文字セット、エンコーディング等の
111 それぞれのリソースはある時点で 0 個、1 個、それ以上の表現と
112 関連付けられる可能性があります。複数の表現が利用できる場合は、
113 リソースは<strong>ネゴシエーション可能である</strong>とされ、
114 個々の表現は <strong>variant</strong> と呼ばれます。
115 ネゴシエーション可能なリソースの variant が異なる、
117 ネゴシエーションの<strong>次元</strong>と呼びます。</p>
118 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
119 <div class="section">
120 <h2><a name="negotiation" id="negotiation">Apache におけるネゴシエーション</a></h2>
122 <p>リソースをネゴシエーションするためには、
123 サーバは variant それぞれについての情報を知っておく必要があります。
124 これは以下の二つの方法のどちらかで行われます。</p>
128 (<em>すなわち</em> <code>*.var</code> ファイル)
130 を明示的に挙げているファイルを指定します。</li>
133 を使って、サーバが暗黙の内にファイル名にパターン照合を
134 行なってその結果から選択する方法。</li>
137 <h3><a name="type-map" id="type-map">type-map ファイルを使う</a></h3>
139 <p>タイプマップは <code>type-map</code> ハンドラ
141 の設定と下位互換である <a class="glossarylink" href="./glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
142 <code>application/x-type-map</code>)
144 この機能を使うためには、あるファイルの拡張子を
145 <code>type-map</code>
147 設定ファイル中に置く必要があることに注意してください。
150 <div class="example"><p><code>AddHandler type-map .var</code></p></div>
152 <p>をサーバ設定ファイル中に書くことが一番良い方法です。</p>
154 <p>タイプマップファイルは記述するリソースと同じ名前を持っていて、
155 利用可能な variant それぞれのエントリを持っている必要があります。
156 そして、このエントリは連続した HTTP のヘッダ行で構成されます。
157 異なる variant のためのエントリは空行で区切られています。
158 エントリ中に空行が複数あってはいけません。
159 習慣的には、マップファイルは全体を結合したもののエントリから始まります
160 (しかしこれは必須ではなく、あったとしても無視されるものです)。
161 次に例を示します。このファイルはリソース <code>foo</code>
162 を記述しているので、<code>foo.var</code> という名前になります。</p>
164 <div class="example"><p><code>
167 URI: foo.en.html<br />
168 Content-type: text/html<br />
169 Content-language: en<br />
171 URI: foo.fr.de.html<br />
172 Content-type: text/html;charset=iso-8859-2<br />
173 Content-language: fr, de<br />
175 <p>たとえ MultiViews を使用するようになっていたとしても、
176 ファイル名の拡張子よりタイプマップの方が優先権を持つということにも
178 variant の品質が違うときは、この画像のように (JPEG, GIF, ASCII
179 アートがあります) メディアタイプの "qs"
182 <div class="example"><p><code>
186 Content-type: image/jpeg; qs=0.8<br />
189 Content-type: image/gif; qs=0.5<br />
192 Content-type: text/plain; qs=0.01<br />
195 <p>qs 値の範囲は 0.000 から 1.000 です。qs 値が
197 選択されないことに注意してください。'qs' 値のない variant
198 は qs 値 1.0 を 与えられます。qs
199 パラメータはクライアントの能力に関係無く、他の variant と
202 例えば、写真を表現しようとしているときは JPEG
204 ファイルよりも高い品質になります。しかし、リソースが元々
205 ASCII アートで表現されているときは、ASCII ファイルの
206 方が JPEG ファイルよりも高い品質になります。このように、qs
207 は 表現されるリソースの性質によって variant
211 <a href="mod/mod_negotiation.html#typemaps">mod_negotiation</a>
215 <h3><a name="multiviews" id="multiviews">Multiviews</a></h3>
217 <p><code>MultiViews</code> はディレクトリ毎のオプションで、
218 <code>httpd.conf</code>ファイルの
219 <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>,
220 <code class="directive"><a href="./mod/core.html#location"><Location></a></code>,
221 <code class="directive"><a href="./mod/core.html#files"><Files></a></code>
222 セクション中や、(<code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
223 が適切な値に 設定されていると) <code>.htaccess</code>
224 ファイルで <code class="directive"><a href="./mod/core.html#options">Options</a></code>
225 ディレクティブによって設定することができます。
226 <code>Options All</code> は
227 <code>MultiViews</code>
228 をセットしないことに注意してください。明示的に
231 <p><code>MultiViews</code> の効果は以下のようになります:
232 サーバが <code>/some/dir/foo</code>
233 へのリクエストを受け取り、<code>/some/dir</code> で
234 <code>MultiViews</code> が有効であって、
235 <code>/some/dir/foo</code> が存在<em>しない</em>場合、
236 サーバはディレクトリを読んで <code>foo.*</code>
238 事実上それらのファイルをマップするタイプマップを作ります。
239 そのとき、メディアタイプとコンテントエンコーディングは、そのファイル名を
240 直接指定したときと同じものが割り当てられます。
241 それからクライアントの要求に一番合うものを選びます。</p>
243 <p>サーバがディレクトリの索引を作ろうとしている場合、
244 <code>MultiViews</code>
245 は <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
246 ディレクティブで指定されたファイルを探す過程にも
248 <div class="example"><p><code>DirectoryIndex index</code></p></div>
249 <p>が書かれていて、<code>index.html</code> と
250 <code>index.html3</code> が
251 両方存在していると、サーバはその中からどちらかを適当に選びます。
252 もしその両方が存在せずに <code>index.cgi</code>
253 が存在していると、 サーバはそれを実行します。</p>
256 文字セット、コンテントタイプ、言語、エンコーディングを
257 指定するための <code>mod_mime</code>
258 で認識できる拡張子を持たないファイルが見つかると、結果は
259 <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>
260 ディレクティブの設定に依存します。このディレクティブは
261 ハンドラ、フィルタ、他のファイル拡張子タイプのどれが
262 MultiViews ネゴシエーションで使用できるかを決定します。</p>
264 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
265 <div class="section">
266 <h2><a name="methods" id="methods">ネゴシエーション方法</a></h2>
268 <p>Apache はリソースの variant の一覧を、タイプマップファイルか
269 ディレクトリ内のファイル名からかで取得した後、
270 「最適な」 variant を決定するために二つの方法の
272 Apache のコンテントネゴシエーションの機能を使うために、
273 どのようにしてこの調停が行われるか詳細を知る必要はありません。
274 しかしながら、この文書の残りでは関心のある人のために、
275 使用されている方法について説明しています。</p>
277 <p>ネゴシエーション方法は二つあります。</p>
280 <li>通常は <strong>Apache のアルゴリズムを用いた Server
281 driven negotiation</strong> が使用されます。Apache
282 のアルゴリズムは後に詳細に説明されています。
283 このアルゴリズムが使用された場合、Apache
284 はより良い結果になるように、特定の次元において品質の値を
286 が品質の値を変える方法は後で詳細に説明されています。</li>
289 で定義されている機構を用いてブラウザが特に指定した場合、
290 <strong>transparent content negotiation</strong>
291 が使用されます。このネゴシエーション方法では、「最適な」
292 variant の決定をブラウザが完全に制御することができます。
293 ですから、結果はブラウザが使用しているアルゴリズムに依存します。
294 Transparent negotiation の処理の過程で、ブラウザは RFC 2296
295 で 定義されている 'remote variant selection algorithm'
296 を実行するように頼むことができます。</li>
299 <h3><a name="dimensions" id="dimensions">ネゴシエーションの次元</a></h3>
312 <td>ブラウザは <code>Accept</code>
314 アイテムそれぞれは、関連した品質数値を持つことができます。
315 variant の説明も品質数値を持つことができます
316 ("qs" パラメータをご覧下さい)。</td>
322 <td>ブラウザは <code>Accept-Language</code>
324 要素それぞれに品質数値を持たせることができます。
325 variants は 0 か 1 つかそれ以上の言語と
332 <td>ブラウザは <code>Accept-Encoding</code>
334 要素それぞれに品質数値を持たせることができます。</td>
340 <td>ブラウザは <code>Accept-Charset</code>
342 要素それぞれに品質数値を持たせることができます。
343 variant はメディアタイプのパラメータとして文字セットを
349 <h3><a name="algorithm" id="algorithm">Apache ネゴシエーションアルゴリズム</a></h3>
351 <p>ブラウザに返す「最適な」variant を (もしあれば) 選択するように
352 Apache は次のアルゴリズムを使うことができます。
353 このアルゴリズムを設定により変更することはできません。
357 <li>まずはじめに、ネゴシエーションの次元それぞれについて適切な
358 <em>Accept*</em> ヘッダフィールドを調べ、
359 variant それぞれに品質を割り当てます。
360 もしある次元の <em>Accept*</em> ヘッダでその variant
361 が許容できないことが示されていれば、それを削除します。
362 variant が一つも残っていなければ、ステップ 4 に行きます。</li>
365 消去法で「最適な」 variant を選びます。
367 テストで選択されなかった variant は削除されていきます。
368 テスト後 variant が一つだけ残っていれば、それを最適なものとして
370 複数 variant が残っていれば、次のテストに進みます。
373 <li>variant のメディアタイプの品質数値と <code>Accept</code>
374 ヘッダの品質数値との積を計算して、最高値の variant
377 <li>言語品質数値が最高の variant を選びます。</li>
379 <li>(もしあれば) <code>Accept-Language</code> ヘッダの言語順か、
381 <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
382 ディレクティブの言語順で最適な言語の variant を選びます。</li>
384 <li>最高「レベル」のメディアパラメータ
385 (text/html メディアタイプのバージョンを与えるために使われます)
386 を持つ variant を選びます。</li>
388 <li><code>Accept-Charset</code> ヘッダ行で与えられている最高の文字セット
389 メディアパラメータを持つ variant を選びます。
390 明示的に除外されていない限り、ISO-8859-1
392 <code>text/*</code> メディアタイプであるけれども
393 特定の文字セットに明示的に関連づけられているわけではない
394 variant は ISO-8859-1 であると仮定されます。</li>
396 <li>ISO-8859-1 <em>ではない</em>文字セットメディアパラメータと
397 関連づけられている variant を選びます。
398 そのような variant がない場合は、代わりに全ての
401 <li>最適なエンコーディングの variant を選びます。
402 もし user-agent が許容するエンコーディングがあれば、
404 そうではなく、もしエンコードされたものとそうでない
405 variant が混ざって存在していたらエンコードされていない
407 variant が全部エンコードされているか
408 variant が全部エンコードされていないという場合は、
409 全ての variant を選びます。</li>
411 <li>内容の最も短い variant を選びます。</li>
413 <li>残っている variant の最初のものを選びます。
414 タイプマップファイルの最初にリストされているか、
415 variant がディレクトリから最初に読み込まれる時に
416 ASCII順でソートしてファイル名が先頭になったか、のどちらかです。</li>
420 <li>アルゴリズムを使って一つの「最適な」variant を選びましたので、
421 それを応答として返します。ネゴシエーションの次元を指定するために
422 HTTP レスポンスヘッダ <code>Vary</code> が設定されます
424 ブラウザやキャッシュはこの情報を使うことができます)。
427 <li>ここに来たということは、variant が一つも選択されなかった
428 (ブラウザが許容するものがなかったため) ということです。
429 406 ステータス ("No Acceptable representation" を意味する)
430 が、利用可能な variant のリストのついた HTML
432 相違の次元を示す HTTP <code>Vary</code> ヘッダも設定されます。</li>
435 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
436 <div class="section">
437 <h2><a name="better" id="better">品質の値を変える</a></h2>
439 <p>上記の Apache ネゴシエーションアルゴリズムの厳格な解釈で
440 得られるであろう値から、Apache は品質数値を時々変えます。
441 これは、このアルゴリズムで完全ではない、あるいは正確でない情報を送る
442 ブラウザ向けによりよい結果を得るために行われます。
443 かなりポピュラーなブラウザで、もしないと間違った variant
444 を選択する結果になってしまうような <code>Accept</code>
446 ブラウザが完全で正しい情報を送っていれば、
449 <h3><a name="wildcards" id="wildcards">メディアタイプとワイルドカード</a></h3>
451 <p><code>Accept:</code> リクエストヘッダはメディアタイプの優先傾向を指定します。
452 これはまた、"image/*" や "*/*"
453 といった「ワイルドカード」メディアタイプを含むことができます。
454 ここで * は任意の文字列にマッチします。
457 <div class="example"><p><code>Accept: image/*, */*</code></p></div>
459 <p>を含むリクエストは、"image/" ではじまるタイプ全てが許容できる、
461 (この場合はじめの "image/*" は冗長になります)
463 扱うことのできる明示的なタイプに加えて、機械的に
464 ワイルドカードを送るブラウザもあります。例えば:</p>
466 <div class="example"><p><code>
467 Accept: text/html, text/plain, image/gif, image/jpeg, */*
469 <p>こうすることの狙いは、明示的にリストしているタイプが優先されるけれども、
470 異なる表現が利用可能であればそれでも良い、ということです。
471 しかしながら、上の基本的なアルゴリズムでは、
472 */* ワイルドカードは他の全てのタイプと全く同等なので優先されません。
473 ブラウザは */* にもっと低い品質 (優先)
474 値を付けてリクエストを送るべきなのです。例えば:</p>
475 <div class="example"><p><code>
476 Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
478 <p>明示的なタイプには品質数値が付けられていませんので、
479 デフォルトの 1.0 (最高値) の優先になります。
480 ワイルドカード */* は低い優先度 0.01 を与えられているので、
481 明示的にリストされているタイプに合致する variant がない場合にのみ、
484 <p>もし <code>Accept:</code> ヘッダが q 値を全く含んで<em>いなければ</em>、
486 Apache は "*/*" があれば 0.01 の q 値を設定します。
487 また、"type/*" の形のワイルドカードには 0.02 の q 値を設定します
488 (ですからこれらは "*/*" のマッチよりも優先されます)。
489 もし <code>Accept:</code> ヘッダ中のメディアタイプのどれかが q
490 値を含んでいれば、これらの特殊な値は適応<em>されず</em>、
491 正しい情報を送るブラウザからのリクエストは期待通りに
495 <h3><a name="exceptions" id="exceptions">言語ネゴシエーションの例外処理</a></h3>
497 <p>Apache 2.0 では新たに、言語ネゴシエーションが適合するものを
498 見つけるのに失敗した時に、優雅にフォールバックできるような
499 ネゴシエーションアルゴリズムが幾つか追加されました。</p>
501 <p>サーバのページをクライアントがリクエストしたけれども、
502 ブラウザの送ってきた <code>Accept-Language</code> に合致するページが一つも
503 見つからなかった場合に、サーバは "No Acceptable Variant"
504 か "Multiple Choices" レスポンスをクライアントに返します。
505 これらのエラーメッセージを返さないように、
506 このような場合には Apache が <code>Accept-Language</code> を無視して、
507 クライアントのリクエストに明示的には合致しないドキュメントを
509 <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
510 ディレクティブは、これらのエラーの一つか両方をオーバーライドするために
512 <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
513 ディレクティブの内容を使ってサーバの判断を代行するようにできます。</p>
515 <p>サーバは他に適合するものが見つからなければ、
516 言語サブセットで適合するものを試そうともします。
517 例えばクライアントが英国英語である <code>en-GB</code> 言語で
518 ドキュメントをリクエストした場合、サーバは HTTP/1.1
519 規格では、単に <code>en</code> とマークされているドキュメントを
520 マッチするものとすることは通常は許されていません。
521 (英国英語は理解できるけど一般的な英語は理解できないという読み手は
522 考えられないので、Accept-Language ヘッダで <code>en-GB</code>
523 を含んで <code>en</code> を含まないのはほぼ確実に設定の間違いである、
525 ですが不幸なことに、多くのクライアントではデフォルトで
527 しかしながら、他の言語にはマッチせず、"No Acceptable Variants"
529 <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
531 サブセット指定を無視して、<code>en-GB</code> を <code>en</code>
533 Apache はクライアントの許容言語リストに暗黙に
534 非常に低い品質値の親言語を加えることになります。
535 しかし、クライアントが "en-GB; q=0.9, fr; q=0.8" とリクエストして、
536 サーバが "en" と "fr" と設計されたドキュメントを持っている場合は、
537 "fr" ドキュメントが返されることに注意してください。
538 このような処理は、HTTP 1.1 規格との整合性を維持して、
539 適切に設定されたクライアントともきちんと動作するために
542 <p>より高度なテクニック (Cookie や特殊な URL パス等)
543 においてもユーザの言語選択をサポートするため、
544 Apache 2.0.47 からは、<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
545 が<a href="env.html">環境変数</a> <code>prefer-language</code>
547 この変数が存在して、適切な言語タグが代入されているのであれば、
548 <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> は合致する variant
549 を選択しようとします。合致するものが無ければ、
550 通常のネゴシエーション手順が適用されます。</p>
552 <div class="example"><h3>Example</h3><p><code>
553 SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
554 Header append Vary cookie
557 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
558 <div class="section">
559 <h2><a name="extensions" id="extensions">Transparent Content Negotiation
562 <p>Apache は transparent content negotiation プロトコル
563 (RFC 2295) を次のように拡張しています。
564 特定のコンテントエンコーディングのみが利用可能である variant
565 に印を付けるために、新たに <code>{encoding ..}</code>
566 要素を variant リスト中に使っています。
567 リスト中のエンコードされた variant を認識し、
568 <code>Accept-Encoding</code> リクエストヘッダに従って許容される
569 エンコードをもった variant は、どれでも候補 variant
571 RVSA/1.0 アルゴリズム (RFC 2296) の実装が拡張されました。
572 RVSA/1.0 の実装では、最適な variant が見つかるまで、
573 計算した品質数値は小数点以下 5 桁まで丸めません。</p>
574 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
575 <div class="section">
576 <h2><a name="naming" id="naming">リンクと名前の変換に関する注意点</a></h2>
578 <p>言語ネゴシエーションを使っている場合は、
581 (詳細は <a href="mod/mod_mime.html#multipleext">mod_mime</a>
583 幾つかの異なる名前の変換を選べることになります。</p>
585 <p>典型的なファイルでは、MIME タイプ拡張子 (<em>例えば</em>
586 <code>html</code>) を持っていて、エンコーディング拡張子
587 (<em>例えば</em> <code>gz</code>) を持っているかもしれなくて、
588 このファイルに異なる言語 variant を用意していれば、
589 もちろん言語拡張子 (<em>例えば</em> <code>en</code>)
599 <li>foo.en.html.gz</li>
602 <p>ファイル名と、それに対して使えるリンクと使えないリンクの例です:</p>
604 <table class="bordered">
615 <td><em>foo.html.en</em></td>
624 <td><em>foo.en.html</em></td>
632 <td><em>foo.html.en.gz</em></td>
642 <td><em>foo.en.html.gz</em></td>
652 <td><em>foo.gz.html.en</em></td>
662 <td><em>foo.html.gz.en</em></td>
672 <p>上の表を見て、拡張子なしのリンク (<em>例えば</em> <code>foo</code>)
674 この利点は、ドキュメントとして応答するファイルの
675 実際のファイルタイプを隠蔽して、リンクの参照を変更することなく
677 <em>例えば</em> <code>html</code> から <code>shtml</code>
678 に、あるいは <code>cgi</code> に変更できる点です。</p>
680 <p>リンクに MIME タイプを使い続けたい (<em>例えば</em>
681 <code>foo.html</code>)時は、言語拡張子は
682 (エンコーディング拡張子もあればそれも含めて)
683 MIME タイプ拡張子の右側になければなりません
684 (<em>例えば</em> <code>foo.html.en</code>)。</p>
685 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
686 <div class="section">
687 <h2><a name="caching" id="caching">キャッシュに関する注意事項</a></h2>
689 <p>キャッシュが一つの表現を保存しているときは、
690 リクエスト URL と関連づけられています。
691 次にその URL がリクエストされた時に、キャッシュは
692 保存されている表現を使用できます。しかし、
693 リソースがサーバでネゴシエーション可能であれば、
694 最初のリクエストでキャッシュされて続くキャッシュヒットでは
695 間違った応答を返してしまうということになりかねません。
696 これを防ぐために、Apache はコンテントネゴシエーションの
697 後に返された応答全てに、HTTP/1.0 クライアントでは
699 また、ネゴシエーションされた応答のキャッシュを可能にする
700 HTTP/1.1 プロトコルの機能も Apache はサポートします。</p>
702 <p>HTTP/1.0 準拠のクライアントからのリクエストに対しては、
703 (ブラウザであろうとキャッシュであろうと)
704 ネゴシエーションを受けた応答のキャッシュを許すために、
705 <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
707 このディレクティブは、サーバ設定ファイルやバーチャルホストに書くことができ、
709 HTTP/1.1 クライアントからのリクエストには効力を持ちません。</p>
711 <p>HTTP/1.1 クライアントに対しては、レスポンスのネゴシエーション次元
712 を示すために <code>Vary</code> HTTP レスポンスヘッダを送ります。
713 キャッシュは、これを使って後続のリクエストに対してローカルコピーで応答できるか
715 ネゴシエーション次元とは関係なしにローカルコピーの使用を優先するようにするには、
716 <code>force-no-vary</code> <a href="env.html#special">環境変数</a>を
720 <div class="bottomlang">
721 <p><span>翻訳済み言語: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> |
722 <a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
723 <a href="./ja/content-negotiation.html" title="Japanese"> ja </a> |
724 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
725 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
726 </div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>This section is experimental!</strong><br />Comments placed here should not be expected
727 to last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div>
728 <div id="disqus_thread">
729 </div><script type="text/javascript"><!--//--><![CDATA[//><!--
731 var disqus_shortname = 'httpd';
732 var disqus_identifier = window.location.href.replace(/(current|trunk)/, "2.4").replace(/\/[a-z]{2}\//, "/").replace(window.location.protocol, "http:") + '.' + lang;
733 if (disqus_identifier.indexOf("httpd.apache.org") != -1) {
735 var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
736 dsq.src = window.location.protocol + '//' + disqus_shortname + '.disqus.com/embed.js';
737 (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
740 var text = document.createTextNode("Comments have been disabled for offline viewing.");
741 document.getElementById('disqus_thread').appendChild(text);
743 //--><!]]></script></div><div id="footer">
744 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p>
745 <p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
746 if (typeof(prettyPrint) !== undefined) {