<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="409" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[409]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor></dfn> (<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>エージェント駆動折衝</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">agent-driven negotiation</rt></rubyb></dfn>)
は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>が提供したリストに基づき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>を選択する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容折衝</anchor>です。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[407]</anchor-end> <cite xml:lang="en">RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</cite> (<time>2014-06-07 01:55:45 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7231#section-3.4.2">https://tools.ietf.org/html/rfc7231#section-3.4.2</anchor-external></li></ul></refs></section><section><h1>処理モデル</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="410" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[410]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源鯖</anchor>が最初の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>に代替<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>のリストを含めます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>はその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>に含まれる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>を用いても構いませんが、
それが最適だと考えない場合は、リストに示されたメタデータによりいずれか1つ以上の代替<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>を選び、
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>を発行します。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;407</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="419" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[419]</anchor-end> このために <code xmlns="http://www.w3.org/1999/xhtml" class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">300</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態符号</anchor>が用意されています。
ただし <code xmlns="http://www.w3.org/1999/xhtml" class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">300</anchor></code> 以外を使っても構わないようです。</comment-p><figure class="sequence"><dl><dt>C</dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor></dd><dt>S</dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源鯖</anchor></dd><dt>C -&gt; S</dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor></dd><dt>S -&gt; C</dt><dd>選択肢リスト付き<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor></dd><dt>#C#</dt><dd>リストから<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>を選択</dd><dt>C -&gt; S</dt><dd>選択した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor></dd><dt>S -&gt; C</dt><dd>選択された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor></dd></dl></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="411" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[411]</anchor-end> この代替<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>の選択は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>によって自動的に行っても構いませんし、
メニューを生成して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に選ばせても構いません。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;407</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="412" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[412]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>は、代替<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>のリストのみを送り、最初の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>を送らないことにしても構いません
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="407" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;407</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="413" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[413]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">型</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>のような共通の次元で異なっている時や、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>の能力を判断しかねる時には有用です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="414" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[414]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> は、公開<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キャッシュ</anchor>によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>の負荷やネットワークの利用を削減している時にも有用です
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="415" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[415]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> はリストを送信しないといけないため転送時間が増えることや、
別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>を得るために別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>を送らないといけないといった欠点があります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="421" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[421]</anchor-end> 選択後の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>の取得は新たな <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>として行われるため、
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> 以外には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> は簡単には使えません。
他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求メソッド</anchor>でも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> を提供したければ、
結果を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>側で別の <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GET</anchor></code> 可能な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> に保存するなど、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">proactive negotiation</anchor> よりも複雑な処理が必要になります。</p></section><section><h1>歴史</h1><figure class="quote"><figcaption><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="408" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[408]</anchor-end> RFC 2068・2616 (HTTP/1.1)  12.2 Agent-driven Negotiation</p></figcaption><blockquote><p>With agent-driven negotiation, selection of the best representation
for a response is performed by the user agent after receiving an
initial response from the origin server. Selection is based on a list
of the available representations of the response included within the
header fields <del>(this specification reserves the field-name Alternates, as described in appendix 19.6.2.1)</del>
or entity-body of the initial response, with each representation identified by its own URI.
Selection from among the representations may be performed automatically
(if the user agent is capable of doing so) or manually by the user selecting from a
generated (possibly hypertext) menu.</p></blockquote><p><dfn>エージェント駆動折衝</dfn>では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源サーバー</anchor>から最初の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>を受信した後で最善の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表現</anchor>の選択を行います。
最初の応答の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">頭欄</anchor>又は <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entity-body</anchor></code>
の中には、それ自身の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor>
で識別される利用可能な表現の一覧が含まれていて、
これに基づいて選択します。 <del>(この仕様書は <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Alternate</anchor></code> という欄名を予約しています。)</del>
表現の選択は (利用者エージェントにそうする能力があれば) 
自動的に行っても構いませんし、 (おそらく<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ハイパーテキスト</anchor>で)
生成されたメニューから<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>が手動で選択しても構いません。</p><blockquote><p>Agent-driven negotiation is advantageous when the response would vary
over commonly-used dimensions (such as type, language, or encoding),
when the origin server is unable to determine a user agent's
capabilities from examining the request, and generally when public
caches are used to distribute server load and reduce network usage.</p></blockquote><p>エージェント駆動折衝は、応答が広く使われている次元
(型、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>など) によって変化する場合や、
起源サーバーが要求を検査しても利用者エージェントの能力を決定できない場合や、
サーバーの負荷を分散させたりネットワークの使用を削減するために公開キャッシュが使われている一般的な場合に有利です。</p><blockquote><p>Agent-driven negotiation suffers from the disadvantage of needing a
second request to obtain the best alternate representation. This
second request is only efficient when caching is used. In addition,
this specification does not define any mechanism for supporting
automatic selection, though it also does not prevent any such
mechanism from being developed as an extension and used within HTTP/1.1.</p></blockquote><p>エージェント駆動折衝は、最善の代替表現を得るために二番目の要求を必要であるという欠点があります。
この二番目の要求はキャッシュが使われているときだけ有効です。
加えて、この仕様書は自動的選択に対応する機構を定義していません。
但し、そのような機構を拡張として開発して <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/1.1</anchor> で使うことも妨げてはいません。</p><blockquote><p>HTTP/1.1 defines the 300 (Multiple Choices) and 406 (Not Acceptable)
status codes for enabling agent-driven negotiation when the server is
unwilling or unable to provide a varying response using server-driven negotiation.</p></blockquote><p>HTTP/1.1 は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー駆動折衝</anchor>を使って変化させた応答を提供するつもりがないか、
それができないときにエージェント駆動折衝を有効化する、
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">300</anchor></code> (複数選択肢) と <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">406</anchor></code>
(受け入れ不能) の2つの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態符号</anchor>を定義しています。</p></figure><figure class="quote"><figcaption><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="420" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[420]</anchor-end> RFC 2068・2616 (HTTP/1.1) 12.3 Transparent Negotiation</p></figcaption><blockquote><p>Transparent negotiation is a combination of both server-driven and
agent-driven negotiation. When a cache is supplied with a form of the
list of available representations of the response (as in agent-driven
negotiation) and the dimensions of variance are completely understood
by the cache, then the cache becomes capable of performing server-driven negotiation on behalf of the origin server for subsequent
requests on that resource.</p></blockquote><p><dfn>透過折衝</dfn>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー駆動折衝</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">エージェント駆動折衝</anchor>の2つの組合せです。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キャッシュ</anchor>が (エージェント駆動折衝として)
応答の利用可能な表現の一覧の形で供給された時は、
キャッシュはその資源についてサーバー駆動折衝応答ができるようになります。</p><blockquote><p>Transparent negotiation has the advantage of distributing the
negotiation work that would otherwise be required of the origin
server and also removing the second request delay of agent-driven
negotiation when the cache is able to correctly guess the right response.</p></blockquote><p>透過折衝には、本来起源サーバーが必要であった折衝を分散させることができ、
キャッシュが正しい応答を正しく推測できるならエージェント折衝の二番目の要求の<ruby>間<rt>ま</rt></ruby>をなくすこともできるという利点があります。</p><blockquote><p>This specification does not define any mechanism for transparent
negotiation, though it also does not prevent any such mechanism from
being developed as an extension <del>and</del> <ins>that could be</ins> used within HTTP/1.1. <del>An HTTP/1.1 cache performing transparent negotiation MUST include a Vary header field in the response (defining the dimensions of its variance) if it is cachable to ensure correct interoperation with all HTTP/1.1 clients. The agent-driven negotiation information supplied by the origin server SHOULD be included with the transparently negotiated response.</del></p></blockquote><p>この仕様書は、透過折衝の機構を定義していません。
しかし、そのような機構を HTTP/1.1 で使うことのできる拡張として開発することを妨げてもいません。 <del>透過折衝を行う HTTP/1.1 キャッシュは、応答がキャッシュ可能であるなら、全ての HTTP/1.1 クライアントに正しく解釈されるようにするため、その応答中に (変化の次元を定義する) <code class="HTTP">Vary</code> 頭欄を含めなければ<strong>なりません</strong>。起源サーバーにより供給されるエージェント折衝情報は透過折衝した応答に含める<strong>べきです</strong>。</del></p></figure></section><section><h1>実装</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="416" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[416]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> 仕様書上の概念としては定義されているものの、
実際には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が自動的に選択できるリストの仕組みが
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> 本体仕様書で定義されていないこともあり、現実にはほとんど用いられていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="417" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[417]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Alternates:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>のようにリストを記述する仕組みが提案されてはいますが、
広く普及するには至っていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="418" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[418]</anchor-end> <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">300</anchor></code> や <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">406</anchor></code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>により、
あるいは場合によっては <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">200</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>により、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>が選択できるメニューを含む <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML文書</anchor>などが提供されることは、
しばしばあります。これも仕様上の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> と言えなくはありません。
(<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="411" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;411</anchor-internal> の通り、手動による選択は明示的に認められています。)
しかし、それは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web</anchor> 上にありふれたただの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ハイパーリンク</anchor>と技術的に何ら変わりありませんから、
敢えて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容折衝</anchor>という概念で説明する必要もないでしょう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="422" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[422]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の原理主義的な人々の間では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容折衝</anchor>は人気の機能であり、
未だに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の仕様書には記述が残っていますが、今後も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> 
が普及しそうな気配はありません。そもそも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor>
がなければ実現できないことが存在していないので、
実装しようとする動きも利用しようとする動きも出てこないのでしょう。</p></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="423" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[423]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>側の機能や環境などの条件によって処理を分けるという点では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Media Queries</anchor> が似た技術とも言えます。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSS</anchor>
などでは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Media Queries</anchor> を使って環境ごとに異なる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">レンダリング</anchor>や異なる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>の処理を実行できます。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reactive negotiation</anchor> とは違って1回のアクセスに複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>の往復が必要にはなりませんし、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">窓</anchor>の大きさの変更などの環境の動的な変化にも対応できます。</p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end>
<q><abbr>UA<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">利用者エージェント</title></abbr>駆動折衝</q>と訳した方が良いのかも・・・とか思いつつ。</p></section></body></html>