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
7      -->
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.min.js" type="text/javascript">
13</script>
14
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.4</p>
19<img alt="" src="/images/feather.gif" /></div>
20<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="./">バージョン 2.4</a></div><div id="page-content"><div id="preamble"><h1>コンテントネゴシエーション</h1>
23<div class="toplang">
24<p><span>翻訳済み言語: </span><a href="/en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
26<a href="/ja/content-negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a> |
27<a href="/ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
28<a href="/tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
29</div>
30<div class="outofdate">この日本語訳はすでに古くなっている
31            可能性があります。
32            最近更新された内容を見るには英語版をご覧下さい。
33        </div>
34
35
36    <p>Apache は HTTP/1.1 の規格に記述されているコンテントネゴシエーションを
37    サポートしています。
38    ブラウザにより提供されたメディアタイプ、
39    言語、文字セット、エンコーディングの優先傾向に基づいて、
40    最適なリソースの表現を選択できます。
41    また、不完全なネゴシエーション情報を送ってくるブラウザからのリクエストを
42    もっと賢く取り扱えるよう、いくつか機能も実装してあります。</p>
43
44    <p>コンテントネゴシエーションは
45    <code class="module"><a href="/mod/mod_negotiation.html">mod_negotiation</a></code>
46    モジュールによって提供されていて、デフォルトで組み込まれています。</p>
47</div>
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
53の拡張</a></li>
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>
58<div class="section">
59<h2><a name="about" id="about">コンテントネゴシエーションについて</a></h2>
60
61    <p>リソースは、幾つか異なった表現で利用できる場合があります。
62    例えば、異なる言語や異なるメディアタイプ、
63    またはそれらの組み合わせで利用できるかも知れません。
64    もっとも適した選択をする方法の一つには、インデックスページを
65    ユーザに見せて、ユーザに選んでもらう方法があります。
66    しかし、サーバが自動的に選ぶことができる場合が多くあります。
67    これは、ブラウザがリクエスト毎に、
68    どの表現を嗜好するかという情報を送ることで動作しています。
69    例えばブラウザは、可能ならフランス語で情報を見たい、
70    不可能ならその代わりに英語でもよいと、
71    自分の嗜好を知らせることができます。
72    ブラウザはリクエストのヘッダで自分の優先傾向を知らせます。
73    フランス語のみの表現を要求する場合は、ブラウザは次を送ります。</p>
74
75<div class="example"><p><code>Accept-Language: fr</code></p></div>
76
77    <p>この優先傾向は、選択可能な表現が存在して、
78    言語によって様々な表現がある場合にのみ適用される
79    ということに注意してください。</p>
80
81    <p>もっと複雑なリクエストの例を挙げましょう。
82    このブラウザはフランス語と英語を受け付ける、しかしフランス語を好む、
83    そして様々なメディアタイプを受け付けるが、
84    プレインテキストや他のタイプよりは HTML を好む、
85    他のメディアタイプよりは GIF や JPEG を好む、しかし最終手段として
86    他のメディアタイプも受け付ける、と設定されています。</p>
87
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
91</code></p></div>
92
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 で定義されている試験的な
100    ネゴシエーションプロトコルです。
101    これらの RFCで定義されている 'feature negotiation'
102    はサポートしていません。</p>
103
104    <p><strong>リソース</strong>とは URI
105    で特定される概念上のもののことです (RFC 2396)。 Apache
106    のような HTTP サーバは、その名前空間の中での
107    リソースの<strong>表現</strong>へのアクセスを提供します。
108    それぞれの表現は
109    定義されたメディアタイプ、文字セット、エンコーディング等の
110    付属した、バイト列の形式です。
111    それぞれのリソースはある時点で 0 個、1 個、それ以上の表現と
112    関連付けられる可能性があります。複数の表現が利用できる場合は、
113    リソースは<strong>ネゴシエーション可能である</strong>とされ、
114    個々の表現は <strong>variant</strong> と呼ばれます。
115    ネゴシエーション可能なリソースの variant が異なる、
116    その状態を指して、
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>
121
122    <p>リソースをネゴシエーションするためには、
123    サーバは variant それぞれについての情報を知っておく必要があります。
124    これは以下の二つの方法のどちらかで行われます。</p>
125
126    <ul>
127      <li>タイプマップ
128      (<em>すなわち</em> <code>*.var</code> ファイル)
129      を使う方法。 これは variant
130      を明示的に挙げているファイルを指定します。</li>
131
132      <li>'Multiviews'
133      を使って、サーバが暗黙の内にファイル名にパターン照合を
134      行なってその結果から選択する方法。</li>
135    </ul>
136
137   <h3><a name="type-map" id="type-map">type-map ファイルを使う</a></h3>
138
139    <p>タイプマップは <code>type-map</code> ハンドラ
140    (もしくは、古い Apache
141    の設定と下位互換である <a class="glossarylink" href="/glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
142    <code>application/x-type-map</code>)
143    に関連付けられたドキュメントです。
144    この機能を使うためには、あるファイルの拡張子を
145    <code>type-map</code>
146    として定義するようなハンドラを、
147    設定ファイル中に置く必要があることに注意してください。
148    これは</p>
149
150<div class="example"><p><code>AddHandler type-map .var</code></p></div>
151
152    <p>をサーバ設定ファイル中に書くことが一番良い方法です。</p>
153
154    <p>タイプマップファイルは記述するリソースと同じ名前を持っていて、
155    利用可能な variant それぞれのエントリを持っている必要があります。
156    そして、このエントリは連続した HTTP のヘッダ行で構成されます。
157    異なる variant のためのエントリは空行で区切られています。
158    エントリ中に空行が複数あってはいけません。
159    習慣的には、マップファイルは全体を結合したもののエントリから始まります
160    (しかしこれは必須ではなく、あったとしても無視されるものです)。
161    次に例を示します。このファイルはリソース <code>foo</code> 
162    を記述しているので、<code>foo.var</code> という名前になります。</p>
163
164<div class="example"><p><code>
165  URI: foo<br />
166<br />
167  URI: foo.en.html<br />
168  Content-type: text/html<br />
169  Content-language: en<br />
170<br />
171  URI: foo.fr.de.html<br />
172  Content-type: text/html;charset=iso-8859-2<br />
173  Content-language: fr, de<br />
174</code></p></div>
175    <p>たとえ MultiViews を使用するようになっていたとしても、
176    ファイル名の拡張子よりタイプマップの方が優先権を持つということにも
177    注意してください。
178    variant の品質が違うときは、この画像のように (JPEG, GIF, ASCII
179    アートがあります) メディアタイプの "qs"
180    パラメータで指定されます。</p>
181
182<div class="example"><p><code>
183  URI: foo<br />
184<br />
185  URI: foo.jpeg<br />
186  Content-type: image/jpeg; qs=0.8<br />
187<br />
188  URI: foo.gif<br />
189  Content-type: image/gif; qs=0.5<br />
190<br />
191  URI: foo.txt<br />
192  Content-type: text/plain; qs=0.01<br />
193</code></p></div>
194
195    <p>qs 値の範囲は 0.000 から 1.000 です。qs 値が
196    0.000 の variant は決して
197    選択されないことに注意してください。'qs' 値のない variant
198    は qs 値 1.0 を 与えられます。qs
199    パラメータはクライアントの能力に関係無く、他の variant と
200    比較したときの variant
201    の相対的な「品質」を示します。
202    例えば、写真を表現しようとしているときは JPEG
203    ファイルの方が普通は ASCII
204    ファイルよりも高い品質になります。しかし、リソースが元々
205    ASCII アートで表現されているときは、ASCII ファイルの
206    方が JPEG ファイルよりも高い品質になります。このように、qs
207    は 表現されるリソースの性質によって variant
208    毎に特有の値を取ります。</p>
209
210    <p>認識されるヘッダの一覧は
211    <a href="mod/mod_negotiation.html#typemaps">mod_negotiation</a>
212    ドキュメントにあります。</p>
213
214
215<h3><a name="multiviews" id="multiviews">Multiviews</a></h3>
216
217    <p><code>MultiViews</code> はディレクトリ毎のオプションで、
218    <code>httpd.conf</code>ファイルの
219    <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code>, 
220    <code class="directive"><a href="/mod/core.html#location">&lt;Location&gt;</a></code>, 
221    <code class="directive"><a href="/mod/core.html#files">&lt;Files&gt;</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    をセットしないことに注意してください。明示的に
229    その名前を書く必要があります。</p>
230
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>
237    にあてはまる全てのファイルを探し、
238    事実上それらのファイルをマップするタイプマップを作ります。
239    そのとき、メディアタイプとコンテントエンコーディングは、そのファイル名を
240    直接指定したときと同じものが割り当てられます。
241    それからクライアントの要求に一番合うものを選びます。</p>
242
243    <p>サーバがディレクトリの索引を作ろうとしている場合、
244    <code>MultiViews</code>
245    は <code class="directive"><a href="/mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
246    ディレクティブで指定されたファイルを探す過程にも
247    適用されます。設定ファイルに</p>
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>
254
255    <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>
263
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>
267
268    <p>Apache はリソースの variant の一覧を、タイプマップファイルか
269    ディレクトリ内のファイル名からかで取得した後、
270    「最適な」 variant を決定するために二つの方法の
271    どちらかを起動します。
272    Apache のコンテントネゴシエーションの機能を使うために、
273    どのようにしてこの調停が行われるか詳細を知る必要はありません。
274    しかしながら、この文書の残りでは関心のある人のために、
275    使用されている方法について説明しています。</p>
276
277    <p>ネゴシエーション方法は二つあります。</p>
278
279    <ol>
280      <li>通常は <strong>Apache のアルゴリズムを用いた Server
281      driven negotiation</strong> が使用されます。Apache
282      のアルゴリズムは後に詳細に説明されています。
283      このアルゴリズムが使用された場合、Apache
284      はより良い結果になるように、特定の次元において品質の値を
285      「変える」ことができます。Apache
286      が品質の値を変える方法は後で詳細に説明されています。</li>
287
288      <li>RFC 2295
289      で定義されている機構を用いてブラウザが特に指定した場合、
290      <strong>transparent content negotiation</strong>
291      が使用されます。このネゴシエーション方法では、「最適な」
292      variant の決定をブラウザが完全に制御することができます。
293      ですから、結果はブラウザが使用しているアルゴリズムに依存します。
294      Transparent negotiation の処理の過程で、ブラウザは RFC 2296
295      で 定義されている 'remote variant selection algorithm'
296      を実行するように頼むことができます。</li>
297    </ol>
298
299<h3><a name="dimensions" id="dimensions">ネゴシエーションの次元</a></h3>
300
301    <table>
302      
303      <tr valign="top">
304        <th>次元</th>
305
306        <th>説明</th>
307      </tr>
308
309      <tr valign="top">
310        <td>メディアタイプ</td>
311
312        <td>ブラウザは <code>Accept</code>
313	ヘッダフィールドで優先傾向を指定します。
314	アイテムそれぞれは、関連した品質数値を持つことができます。
315	variant の説明も品質数値を持つことができます
316	("qs" パラメータをご覧下さい)。</td>
317      </tr>
318
319      <tr valign="top">
320        <td>言語</td>
321
322	<td>ブラウザは <code>Accept-Language</code>
323	ヘッダフィールドで優先傾向を指定します。
324	要素それぞれに品質数値を持たせることができます。
325	variants は 0 か 1 つかそれ以上の言語と
326	関連づけることができます。</td>
327      </tr>
328
329      <tr valign="top">
330        <td>エンコーディング</td>
331
332	<td>ブラウザは <code>Accept-Encoding</code>
333	ヘッダフィールドで優先傾向を指定します。
334	要素それぞれに品質数値を持たせることができます。</td>
335      </tr>
336
337      <tr valign="top">
338        <td>文字セット</td>
339
340	<td>ブラウザは <code>Accept-Charset</code>
341	ヘッダフィールドで優先傾向を指定します。
342	要素それぞれに品質数値を持たせることができます。
343	variant はメディアタイプのパラメータとして文字セットを
344	指定することもできます。</td>
345      </tr>
346    </table>
347
348
349<h3><a name="algorithm" id="algorithm">Apache ネゴシエーションアルゴリズム</a></h3>
350
351    <p>ブラウザに返す「最適な」variant を (もしあれば) 選択するように
352    Apache は次のアルゴリズムを使うことができます。
353    このアルゴリズムを設定により変更することはできません。
354    次のように動作します:</p>
355
356    <ol>
357      <li>まずはじめに、ネゴシエーションの次元それぞれについて適切な
358      <em>Accept*</em> ヘッダフィールドを調べ、
359      variant それぞれに品質を割り当てます。
360      もしある次元の <em>Accept*</em> ヘッダでその variant
361      が許容できないことが示されていれば、それを削除します。
362      variant が一つも残っていなければ、ステップ 4 に行きます。</li>
363
364      <li>
365	消去法で「最適な」 variant を選びます。
366	次のテストが順番に適用されます。
367	テストで選択されなかった variant は削除されていきます。
368	テスト後 variant が一つだけ残っていれば、それを最適なものとして
369	ステップ 3 に進みます。
370	複数 variant が残っていれば、次のテストに進みます。
371
372        <ol>
373	  <li>variant のメディアタイプの品質数値と <code>Accept</code>
374	  ヘッダの品質数値との積を計算して、最高値の variant
375	  を選びます。</li>
376
377	  <li>言語品質数値が最高の variant を選びます。</li>
378
379	  <li>(もしあれば) <code>Accept-Language</code> ヘッダの言語順か、
380	  (もしあれば)
381	  <code class="directive"><a href="/mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> 
382	  ディレクティブの言語順で最適な言語の variant を選びます。</li>
383
384	  <li>最高「レベル」のメディアパラメータ
385	  (text/html メディアタイプのバージョンを与えるために使われます)
386	  を持つ variant を選びます。</li>
387
388	  <li><code>Accept-Charset</code> ヘッダ行で与えられている最高の文字セット
389	  メディアパラメータを持つ variant を選びます。
390	  明示的に除外されていない限り、ISO-8859-1
391	  が許容されるようになっています。
392	  <code>text/*</code> メディアタイプであるけれども
393	  特定の文字セットに明示的に関連づけられているわけではない
394	  variant は ISO-8859-1 であると仮定されます。</li>
395
396	  <li>ISO-8859-1 <em>ではない</em>文字セットメディアパラメータと
397	  関連づけられている variant を選びます。
398	  そのような variant がない場合は、代わりに全ての
399	  variant を選びます。</li>
400
401	  <li>最適なエンコーディングの variant を選びます。
402	  もし user-agent が許容するエンコーディングがあれば、
403	  その variant のみを選びます。
404	  そうではなく、もしエンコードされたものとそうでない
405	  variant が混ざって存在していたらエンコードされていない
406	  variant のみを選びます。
407	  variant が全部エンコードされているか
408	  variant が全部エンコードされていないという場合は、
409	  全ての variant を選びます。</li>
410
411	  <li>内容の最も短い variant を選びます。</li>
412
413	  <li>残っている variant の最初のものを選びます。
414	  タイプマップファイルの最初にリストされているか、
415	  variant がディレクトリから最初に読み込まれる時に
416	  ASCII順でソートしてファイル名が先頭になったか、のどちらかです。</li>
417        </ol>
418      </li>
419
420      <li>アルゴリズムを使って一つの「最適な」variant を選びましたので、
421      それを応答として返します。ネゴシエーションの次元を指定するために
422      HTTP レスポンスヘッダ <code>Vary</code> が設定されます
423      (リソースのキャッシュをする時に、
424      ブラウザやキャッシュはこの情報を使うことができます)。
425      以上で終わり。</li>
426
427      <li>ここに来たということは、variant が一つも選択されなかった
428      (ブラウザが許容するものがなかったため) ということです。
429      406 ステータス ("No Acceptable representation" を意味する)
430      が、利用可能な variant のリストのついた HTML 
431      ドキュメントとともに返されます。
432      相違の次元を示す HTTP <code>Vary</code> ヘッダも設定されます。</li>
433    </ol>
434
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>
438
439    <p>上記の Apache ネゴシエーションアルゴリズムの厳格な解釈で
440    得られるであろう値から、Apache は品質数値を時々変えます。
441    これは、このアルゴリズムで完全ではない、あるいは正確でない情報を送る
442    ブラウザ向けによりよい結果を得るために行われます。
443    かなりポピュラーなブラウザで、もしないと間違った variant
444    を選択する結果になってしまうような <code>Accept</code>
445    ヘッダ情報を送るものもあります。
446    ブラウザが完全で正しい情報を送っていれば、
447    この数値変化は適用されません。</p>
448
449<h3><a name="wildcards" id="wildcards">メディアタイプとワイルドカード</a></h3>
450
451    <p><code>Accept:</code> リクエストヘッダはメディアタイプの優先傾向を指定します。
452    これはまた、"image/*" や "*/*"
453    といった「ワイルドカード」メディアタイプを含むことができます。
454    ここで * は任意の文字列にマッチします。
455    ですから、次の:</p>
456
457<div class="example"><p><code>Accept: image/*, */*</code></p></div>
458
459    <p>を含むリクエストは、"image/" ではじまるタイプ全てが許容できる、
460    そして他のどんなタイプも許容できる
461    (この場合はじめの "image/*" は冗長になります)
462    ことを示します。
463    扱うことのできる明示的なタイプに加えて、機械的に
464    ワイルドカードを送るブラウザもあります。例えば:</p>
465
466<div class="example"><p><code>
467  Accept: text/html, text/plain, image/gif, image/jpeg, */*
468</code></p></div>
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
477</code></p></div>
478    <p>明示的なタイプには品質数値が付けられていませんので、
479    デフォルトの 1.0 (最高値) の優先になります。
480    ワイルドカード */* は低い優先度 0.01 を与えられているので、
481    明示的にリストされているタイプに合致する variant がない場合にのみ、
482    他のタイプが返されます。</p>
483
484    <p>もし <code>Accept:</code> ヘッダが q 値を全く含んで<em>いなければ</em>、
485    望みの挙動をするために、
486    Apache は "*/*" があれば 0.01 の q 値を設定します。
487    また、"type/*" の形のワイルドカードには 0.02 の q 値を設定します
488    (ですからこれらは "*/*" のマッチよりも優先されます)。
489    もし <code>Accept:</code> ヘッダ中のメディアタイプのどれかが q
490    値を含んでいれば、これらの特殊な値は適応<em>されず</em>、
491    正しい情報を送るブラウザからのリクエストは期待通りに
492    動作するようになります。</p>
493
494
495<h3><a name="exceptions" id="exceptions">言語ネゴシエーションの例外処理</a></h3>
496
497    <p>Apache 2.0 では新たに、言語ネゴシエーションが適合するものを
498    見つけるのに失敗した時に、優雅にフォールバックできるような
499    ネゴシエーションアルゴリズムが幾つか追加されました。</p>
500
501    <p>サーバのページをクライアントがリクエストしたけれども、
502    ブラウザの送ってきた <code>Accept-Language</code> に合致するページが一つも
503    見つからなかった場合に、サーバは "No Acceptable Variant"
504    か "Multiple Choices" レスポンスをクライアントに返します。
505    これらのエラーメッセージを返さないように、
506    このような場合には Apache が <code>Accept-Language</code> を無視して、
507    クライアントのリクエストに明示的には合致しないドキュメントを
508    提供するように設定できます。
509    <code class="directive"><a href="/mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
510    ディレクティブは、これらのエラーの一つか両方をオーバーライドするために
511    使用できて、
512    <code class="directive"><a href="/mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
513    ディレクティブの内容を使ってサーバの判断を代行するようにできます。</p>
514
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> を含まないのはほぼ確実に設定の間違いである、
524    ということに注意してください。
525    ですが不幸なことに、多くのクライアントではデフォルトで
526    このような設定になっています。)
527    しかしながら、他の言語にはマッチせず、"No Acceptable Variants"
528    エラーを返したり、
529    <code class="directive"><a href="/mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
530    にフォールバックしようとしているときは、
531    サブセット指定を無視して、<code>en-GB</code> を <code>en</code>
532    にマッチします。
533    Apache はクライアントの許容言語リストに暗黙に
534    非常に低い品質値の親言語を加えることになります。
535    しかし、クライアントが "en-GB; q=0.9, fr; q=0.8" とリクエストして、
536    サーバが "en" と "fr" と設計されたドキュメントを持っている場合は、
537    "fr" ドキュメントが返されることに注意してください。
538    このような処理は、HTTP 1.1 規格との整合性を維持して、
539    適切に設定されたクライアントともきちんと動作するために
540    必要です。</p>
541
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>
546    を認識するようになりました。
547    この変数が存在して、適切な言語タグが代入されているのであれば、
548    <code class="module"><a href="/mod/mod_negotiation.html">mod_negotiation</a></code> は合致する variant
549    を選択しようとします。合致するものが無ければ、
550    通常のネゴシエーション手順が適用されます。</p>
551
552    <div class="example"><h3>Example</h3><p><code>
553      SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
554      Header append Vary cookie 
555    </code></p></div>
556
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
560の拡張</a></h2> 
561
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
570として使用するように、
571RVSA/1.0 アルゴリズム (RFC 2296) の実装が拡張されました。
572RVSA/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>
577
578    <p>言語ネゴシエーションを使っている場合は、
579    ファイルが一つ以上の拡張子を持てて、
580    拡張子の順番は通常は考慮されない
581    (詳細は <a href="mod/mod_mime.html#multipleext">mod_mime</a> 
582    を参照) ので、
583    幾つかの異なる名前の変換を選べることになります。</p>
584
585    <p>典型的なファイルでは、MIME タイプ拡張子 (<em>例えば</em>
586    <code>html</code>) を持っていて、エンコーディング拡張子
587    (<em>例えば</em> <code>gz</code>) を持っているかもしれなくて、
588    このファイルに異なる言語 variant を用意していれば、
589    もちろん言語拡張子 (<em>例えば</em> <code>en</code>)
590    を持っているでしょう。</p>
591
592    <p>例:</p>
593
594    <ul>
595      <li>foo.en.html</li>
596
597      <li>foo.html.en</li>
598
599      <li>foo.en.html.gz</li>
600    </ul>
601
602    <p>ファイル名と、それに対して使えるリンクと使えないリンクの例です:</p>
603
604    <table class="bordered">
605      
606      <tr>
607        <th>ファイル名</th>
608
609        <th>使えるリンク</th>
610
611        <th>使えないリンク</th>
612      </tr>
613
614      <tr>
615        <td><em>foo.html.en</em></td>
616
617        <td>foo<br />
618         foo.html</td>
619
620        <td>-</td>
621      </tr>
622
623      <tr>
624        <td><em>foo.en.html</em></td>
625
626        <td>foo</td>
627
628        <td>foo.html</td>
629      </tr>
630
631      <tr>
632        <td><em>foo.html.en.gz</em></td>
633
634        <td>foo<br />
635         foo.html</td>
636
637        <td>foo.gz<br />
638         foo.html.gz</td>
639      </tr>
640
641      <tr>
642        <td><em>foo.en.html.gz</em></td>
643
644        <td>foo</td>
645
646        <td>foo.html<br />
647         foo.html.gz<br />
648         foo.gz</td>
649      </tr>
650
651      <tr>
652        <td><em>foo.gz.html.en</em></td>
653
654        <td>foo<br />
655         foo.gz<br />
656         foo.gz.html</td>
657
658        <td>foo.html</td>
659      </tr>
660
661      <tr>
662        <td><em>foo.html.gz.en</em></td>
663
664        <td>foo<br />
665         foo.html<br />
666         foo.html.gz</td>
667
668        <td>foo.gz</td>
669      </tr>
670    </table>
671
672    <p>上の表を見て、拡張子なしのリンク (<em>例えば</em> <code>foo</code>) 
673    がいつでも使えることに気が付くでしょう。
674    この利点は、ドキュメントとして応答するファイルの
675    実際のファイルタイプを隠蔽して、リンクの参照を変更することなく
676    後からファイルを変更できる、
677    <em>例えば</em> <code>html</code> から <code>shtml</code>
678    に、あるいは <code>cgi</code> に変更できる点です。</p>
679
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>
688
689    <p>キャッシュが一つの表現を保存しているときは、
690    リクエスト URL と関連づけられています。
691    次にその URL がリクエストされた時に、キャッシュは
692    保存されている表現を使用できます。しかし、
693    リソースがサーバでネゴシエーション可能であれば、
694    最初のリクエストでキャッシュされて続くキャッシュヒットでは
695    間違った応答を返してしまうということになりかねません。
696    これを防ぐために、Apache はコンテントネゴシエーションの
697    後に返された応答全てに、HTTP/1.0 クライアントでは
698    キャッシュ不可能の印をつけます。
699    また、ネゴシエーションされた応答のキャッシュを可能にする
700    HTTP/1.1 プロトコルの機能も Apache はサポートします。</p>
701
702    <p>HTTP/1.0 準拠のクライアントからのリクエストに対しては、
703    (ブラウザであろうとキャッシュであろうと)
704    ネゴシエーションを受けた応答のキャッシュを許すために、
705    <code class="directive"><a href="/mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
706    ディレクティブを使用できます。
707    このディレクティブは、サーバ設定ファイルやバーチャルホストに書くことができ、
708    引数をとりません。
709    HTTP/1.1 クライアントからのリクエストには効力を持ちません。</p>
710
711    <p>HTTP/1.1 クライアントに対しては、レスポンスのネゴシエーション次元
712    を示すために <code>Vary</code> HTTP レスポンスヘッダを送ります。
713    キャッシュは、これを使って後続のリクエストに対してローカルコピーで応答できるか
714    どうかを決定できます。
715    ネゴシエーション次元とは関係なしにローカルコピーの使用を優先するようにするには、
716    <code>force-no-vary</code> <a href="env.html#special">環境変数</a>を
717    設定します。</p>
718
719</div></div>
720<div class="bottomlang">
721<p><span>翻訳済み言語: </span><a href="/en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
722<a href="/fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
723<a href="/ja/content-negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a> |
724<a href="/ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
725<a href="/tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</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>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
727<script type="text/javascript"><!--//--><![CDATA[//><!--
728var comments_shortname = 'httpd';
729var comments_identifier = 'http://httpd.apache.org/docs/2.4/content-negotiation.html';
730(function(w, d) {
731    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
732        d.write('<div id="comments_thread"><\/div>');
733        var s = d.createElement('script');
734        s.type = 'text/javascript';
735        s.async = true;
736        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
737        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
738    }
739    else { 
740        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
741    }
742})(window, document);
743//--><!]]></script></div><div id="footer">
744<p class="apache">Copyright 2014 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[//><!--
746if (typeof(prettyPrint) !== 'undefined') {
747    prettyPrint();
748}
749//--><!]]></script>
750</body></html>