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