github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/manual/content-negotiation.html.ja.utf8 (about)

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