<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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <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">entity-tag</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>です。</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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <strong><cite xml:lang="en">RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</cite> (<time>2014-09-11 10:02:44 +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/rfc7232#section-2.3">https://tools.ietf.org/html/rfc7232#section-2.3</anchor-external></strong></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <cite xml:lang="en">RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</cite> (<time>2014-09-11 10:02:44 +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/rfc7232#section-2.1">https://tools.ietf.org/html/rfc7232#section-2.1</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <cite xml:lang="en">RFC 2295 - Transparent Content Negotiation in HTTP</cite> (<time>2014-08-31 19:36:42 +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="http://tools.ietf.org/html/rfc2295#section-9.2">http://tools.ietf.org/html/rfc2295#section-9.2</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <cite xml:lang="en">RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</cite> (<time>2014-09-21 17:04:59 +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="http://tools.ietf.org/html/rfc4918#section-8.6">http://tools.ietf.org/html/rfc4918#section-8.6</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <cite xml:lang="en">RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</cite> (<time>2014-09-21 17:04:59 +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="http://tools.ietf.org/html/rfc4918#section-8.8">http://tools.ietf.org/html/rfc4918#section-8.8</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> <cite xml:lang="en">RFC 6249 - Metalink/HTTP: Mirrors and Hashes</cite> (<time>2014-09-07 22:47:12 +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="http://tools.ietf.org/html/rfc6249#section-2">http://tools.ietf.org/html/rfc6249#section-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="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <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">entity-tag</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>によって同時に<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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</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>としても用いることができ、
次に示す通り構文で区別します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</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>に関するもので、<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="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src>。</p></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体タグ</anchor>は、 <code>&quot;</code> で括られた文字列か、
<code>W/</code> の後に <code>&quot;</code> で括られた文字列を続けたものです。
<code>&quot;</code> の間には、 <code>&quot;</code> と <code class="charname"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SPACE</anchor></code>
以外の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII文字</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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</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="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml">&quot;</code> の間には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0x80</anchor>-<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0xFF</anchor> も <code xmlns="http://www.w3.org/1999/xhtml" class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">obs-text</anchor></code> 
として認められています <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src>。明記されていませんが、これらは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">生成</anchor>は禁止しつつ、
受信者は対応しなければならないという意図と推察されます。</comment-p><figure class="railroad"><ol><li>?<ol><li><code>W/</code></li></ol></li><li><code>&quot;</code></li><li>*<ol><li>|<ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0021</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0023</anchor></code>-<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+007E</anchor></code></li></ol></li></ol></li><li><code>&quot;</code></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2616</anchor> までは <code>&quot;</code> の部分は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引用文字列</anchor>だったので、
受信者によっては <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">\</anchor></code> の unescape を行います。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>は <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">\</anchor></code> を避ける<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べき<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">ought to</rt></rubyb>です。 <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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2616</anchor> までは <code>W</code> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">小文字</anchor>でも構文上構わないことになっていましたが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7232</anchor> で特に説明もなく禁止されました。 <code>&quot;</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>の使用も同じく禁止されています。</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="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 元々 (不透明な識別子のはずなのに) なぜ正規化の問題が生じてしまう<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引用文字列</anchor>を採用したのか、
また他に例を見ない <code xmlns="http://www.w3.org/1999/xhtml">W/</code> のような奇妙な構文を採用したのか謎です。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 現実には、 <code>&quot;</code> で括られていない文字列が使われることもあります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <code>W/</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:">起源鯖</anchor>が任意の方法で決定できます。</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="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</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>だけです。
<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>を構成しても構いませんし、
その方法を明記する必要も手段もありません。</comment-p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</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>を適用した結果を使ったり、
秒以下の値も含んだ<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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src></p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</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>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構造化実体タグ</anchor>でなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></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="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;10</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="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2295</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>が用いるべき<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>構造化実体タグ</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">structured entity tag</rt></rubyb>構文を定義していましたが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">透過内容折衝</anchor>は普及しませんでした。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</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>の性質を満たさない時は、
<code>W/</code> を指定しなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Metalink/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:">実体タグ</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="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;34</anchor-internal></src>。</p></section><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</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:">ETag:</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:">If-Match:</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:">If-None-Match:</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:">If-Range:</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:">Delta-Base:</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:">If:</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="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebDAV</anchor> (や編集目的) の場合にはとりわけ <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Last-Modified:</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>が、また弱い実体タグより強い実体タグが好ましいと考えられています <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="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src>。</p></section><section><h1>値の変更</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</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>のかわりに使われてしまってはいけない時には弱い<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体タグ</anchor>を変更する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></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="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;47</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PUT</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:">要求</anchor>で指定された
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">payload body</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="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebDAV</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:">URL</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:"><strong xmlns="http://www.w3.org/1999/xhtml">べきではありません</strong></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="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebDAV</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:">COPY</anchor></code> や <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MOVE</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:">メソッド</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>が異なる場合には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体タグ</anchor>を再利用しては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal></src></p></section><section><h1>比較</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</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>には、<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い比較<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">strong comparison</rt></rubyb></dfn>と<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">弱い比較<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">weak comparison</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>は <code>W/</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>とします。
<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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src></p></section><section><h1>プライバシー</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</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:">fingerprinting vector</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="2624" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2624</anchor-internal></src>。</p><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="2624" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2624]</anchor-end> <cite>Fingerprinting – WebKit</cite>
( (<time>2014-07-09 14:39:20 +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="http://trac.webkit.org/wiki/Fingerprinting#v.HTTPETags">http://trac.webkit.org/wiki/Fingerprinting#v.HTTPETags</anchor-external></li></ul></refs></section><section><h1>歴史</h1><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> RFC 2068・2616 (HTTP/1.1) 3.11 Entity Tags</figcaption><blockquote><p>Entity tags are used for comparing two or more entities from the same
requested resource. HTTP/1.1 uses entity tags in the ETag (section <del>14.20</del> <ins>14.19</ins>), If-Match (section <del>14.25</del> <ins>14.24</ins>), If-None-Match (section 14.26), and
If-Range (section 14.27) header fields. The definition of how they
are used and compared as cache validators is in section 13.3.3. An
entity tag consists of an opaque quoted string, possibly prefixed by
a weakness indicator.</p></blockquote><p><dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体札</anchor></dfn>は、要求された同じ資源からの2つ以上の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>群を比較するのに使います。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/1.1</anchor> は実体札を <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ETag</anchor></code>, <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Match</anchor></code>, <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-None-Match</anchor></code>, <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Range</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:">検証子</anchor>としてどう使用・比較するかの定義は13.3.3節にあります。
一つの実体札は、一つの<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><ul><li>entity-tag = [ weak ] opaque-tag</li><li>weak       = &quot;W/&quot;</li><li>opaque-tag = quoted-string</li></ul></blockquote><blockquote><p>A &quot;strong entity tag&quot; <del>may</del> <ins>MAY</ins> be shared by two entities of a resource
only if they are equivalent by octet equality.</p></blockquote><p>「<dfn>強い実体札</dfn>」は、一つの資源の二つの実体が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オクテット</anchor>比較で同等である場合に限って両実体で共有しても<strong>構いません</strong>。</p><blockquote><p>A &quot;weak entity tag,&quot; indicated by the &quot;W/&quot; prefix, <del>may</del> <ins>MAY</ins> be shared by
two entities of a resource only if the entities are equivalent and
could be substituted for each other with no significant change in
semantics. A weak entity tag can only be used for weak comparison.</p></blockquote><p>「<dfn>弱い実体札</dfn>」は、 <code class="HTTP">W/</code> という接頭辞で示します。
一つの資源の二つの実体が同等であり、意味上重大な変更を加えてしまうことなしに互いに代替することができるのであれば、
両実体で共有しても<strong>構いません</strong>。弱い実体札は弱い比較の時だけ使うことができます。</p><blockquote><p>An entity tag MUST be unique across all versions of all entities
associated with a particular resource. A given entity tag value <del>may</del> <ins>MAY</ins>
be used for entities obtained by requests on different URIs <del>without implying anything about the equivalence of those entities</del>. <ins>The use of the same entity tag value in conjunction with entities obtained by requests on different URIs does not imply the equivalence of those entities.</ins></p></blockquote><p>実体札は、特定の資源に関連付けられているすべての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>のすべての版に渡って固有なものでなければ<strong>なりません</strong>。
ある実体札値は、<del>それらの実体の同等性について何ら暗示することなしに、</del>
異なる URI についての要求群で得られる実体群について使用しても<strong>構いません</strong>。<ins>異なる URI についての要求群で得られる実体に同じ実体札値が使われていても、それらの実体が同等であることを暗示するわけではありません。</ins></p></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3229</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:">RFC</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="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src>。</p><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="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en">RFC 3229 - Delta encoding in HTTP</cite> (<time>2014-10-26 21:15:25 +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="http://tools.ietf.org/html/rfc3229#page-7">http://tools.ietf.org/html/rfc3229#page-7</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <cite xml:lang="en">RFC 3229 - Delta encoding in HTTP</cite> (<time>2014-10-26 21:15:25 +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="http://tools.ietf.org/html/rfc3229#page-10">http://tools.ietf.org/html/rfc3229#page-10</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 723x</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>という用語はそのまま残っています。「実体」とは何なのかの説明はありません。</p></section><section><h1>実装</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache</anchor> では実体札の算出に、当該ファイルの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">inode</anchor> 番号, 大きさ, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mtime</anchor> を使っています。 <samp class="HTTP">Etag: &quot;19ebd-86f-a5f83ea5&quot;</samp> のような値が得られます。この計算方法は 1.<var>x</var> と 2.<var>x</var> で微妙に違うようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;36</anchor-internal> 参考 [Apache-Users 2282], [Apache-Users 2287]</p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <cite>[modperl:0415] Re: 実体ファイルのないリクエストに対する ETag ヘッダ値について</cite>,
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hiroyuki OYAMA</anchor>, 2003年4月
<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="mid:200304021116.h32BGS2V051267@iris.glay.ne.jp">mid:200304021116.h32BGS2V051267@iris.glay.ne.jp</anchor-external></figcaption><blockquote><p>ETagの文字列はmod_perlのset_etagメソッド内部で呼び出される
Apacheのap_make_etag()関数で生成されています。この関数はファ
イルに対するリクエストの場合<ul><li>ファイルのinode番号</li><li>ファイルのファイルサイズ</li><li>ファイルの更新時刻</li></ul></p><p>の情報を&quot;-&quot;で連結した文字列を生成し、ファイルに対するリクエ
ストではない場合は<ul><li>ap_set_last_modified()などでセットした更新時刻</li></ul></p><p>の文字列を生成します。</p><p>なのでファイルへのアクセスを処理するコンテンツハンドラであ
れば、「他のスタティックなコンテンツ」と同じ形式のETagが生
成されますが、ファイルの実体を持たないコンテンツハンドラの
場合は最終更新日だけをつかったETagが生成されます。
と、これはset_etagメソッドでETagを設定する場合で、
set_etagメソッドを使わずに自分でETagを生成・セットすること
もできます。</p><pre>  % perl -e 'printf q{&quot;%x-%x-%x&quot;}, (stat(&quot;/docs/charset.html&quot;))[1,7,9]'
&gt;
;; 詳しくは$APACHE_SRC/main/http_protocol.cのap_set_etag()と
ap_make_etag()を見てください。</pre></blockquote></figure></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Match:</anchor></code> と <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-None-Match:</anchor></code>
では <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">*</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="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Range:</anchor></code> では<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>ではありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</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>に適用したものといえます。</p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</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:">URL</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="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Last-Modified:</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:">HTTP/1.1</anchor> 
で導入されました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</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:">HTTP</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="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ETag:</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>だけですが、
そのような形態なら普通 <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Last-Modified:</anchor></code> と
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">If-Modified-Since:</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>を複雑化する以外に役に立っていないとすら言えます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ETag:</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="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> また <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;15</anchor-internal> のように<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="2625" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2625]</anchor-end> <cite>ETagをどう生成するか - 岩本隆史の日記帳</cite>
( (<time>2012-04-11 23:38:46 +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="http://d.hatena.ne.jp/IwamotoTakashi/20080826/p2">http://d.hatena.ne.jp/IwamotoTakashi/20080826/p2</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2626" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2626]</anchor-end> <cite>ETagを使ってSpringとHibernateの転送量と負荷を削減する</cite>
( (<time>2014-09-15 10:29:51 +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="http://www.infoq.com/jp/articles/etags">http://www.infoq.com/jp/articles/etags</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2627" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2627]</anchor-end> <cite xml:lang="ja">ricollab Web Tech Blog » Blog Archive » ETagについて</cite>
( (<time>2014-09-15 10:30:23 +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="http://blogs.ricollab.jp/webtech/2008/02/etag/">http://blogs.ricollab.jp/webtech/2008/02/etag/</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2628" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2628]</anchor-end> <cite xml:lang="en">2.2.5.4 ETag</cite>
( (<time>2014-09-15 10:31:25 +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="http://msdn.microsoft.com/en-us/library/dd541486.aspx">http://msdn.microsoft.com/en-us/library/dd541486.aspx</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2629" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2629]</anchor-end> <cite xml:lang="en">ビューの条件付き処理 — Django 1.4 documentation</cite>
( (<time>2014-01-25 01:32:05 +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="http://docs.djangoproject.jp/en/latest/topics/conditional-view-processing.html">http://docs.djangoproject.jp/en/latest/topics/conditional-view-processing.html</anchor-external></p></section></body></html>