[13] 実体タグは、 同じ資源の複数の表現が異なるかどうか、 資源の状態が時を経て変化したり、 内容折衝によって同時に妥当な表現が複数存在していたり、 その両方が起こったりしても区別できるような不透明な検証子です >>11。
[23] 実体タグは、修正日時の秒の精度では不十分だったり、 修正日時を一貫して維持できなかったりして修正日時では不便な状況で、 修正日時より信頼できる検証子として使うことができます >>11。
[17] 実体タグは、 "
で括られた文字列か、
W/
の後に "
で括られた文字列を続けたものです。
"
の間には、 "
と SPACE
以外のASCII文字を使うことができます。 >>11
[21] RFC 2616 までは "
の部分は引用文字列だったので、
受信者によっては \
の unescape を行います。
鯖は \
を避けるべきです。 >>11
[22] RFC 2616 までは W
は小文字でも構文上構わないことになっていましたが、
RFC 7232 で特に説明もなく禁止されました。 "
で括られた部分での空白や制御文字の使用も同じく禁止されています。
[32] 現実には、 "
で括られていない文字列が使われることもあります。
[29] W/
から始まるものは弱い検証子で、そうでないものは強い検証子です。
残りの部分は不透明な識別子で、起源鯖が任意の方法で決定できます。
[9] 透過内容折衝を使った応答では、実体タグは構造化実体タグでなければなりません >>10。
[30] 起源鯖は実体タグが強い検証子の性質を満たさない時は、
W/
を指定しなければなりません >>11。
[41] Metalink/HTTP では、一連の鯖の間で実体タグのポリシーを共通化することが求められています >>34。
[35] 実体タグは ETag:
ヘッダーの他、
If-Match:
ヘッダーや
If-None-Match:
ヘッダーや
If-Range:
ヘッダー、
Delta-Base:
ヘッダー、
If:
ヘッダーでも使われます。
[20] WebDAV (や編集目的) の場合にはとりわけ Last-Modified:
のタイムスタンプよりも実体タグが、また弱い実体タグより強い実体タグが好ましいと考えられています >>19。
[46] 起源鯖は、以前の表現が現在の表現のかわりに使われてしまってはいけない時には弱い実体タグを変更するべきです。 >>47
[25] PUT
応答における実体タグが要求で指定された
payload body と完全に一致するものに対するものなのか、
鯖側での軽微な変更も認められるのかは定かではありません >>19。
[26] WebDAV 鯖は本体や URL が変わっていない資源の実体タグを変えるべきではありません >>19。
[40] WebDAV 鯖は、 (COPY
や MOVE
などの URL を操作するメソッドの結果であろうと、) GET
が返すであろう表現が異なる場合には実体タグを再利用してはなりません。 >>27
[38] 実体タグの比較には、強い比較と弱い比較があります。
強い比較は両者とも弱くなく、文字の列として一致する時等価とします。
弱い比較は W/
の有無に関わらず、残りの部分が文字の列として一致する時等価とします。
>>11
[15] 実体タグはクッキーの代用として濫用されることがあり、 fingerprinting vector とみなされています >>2624。
[16] RFC 3229 は HTTP RFC の用語は複雑であるとして新たに「実現値」 なる概念を導入し、実体タグは実体ではなく実現値に対して割り当てられた識別子であるとしました >>12, >>14。
[7] RFC 723x 世代ではHTTP実体という概念が消失していますが、 実体タグという用語はそのまま残っています。「実体」とは何なのかの説明はありません。
[36] Apache では実体札の算出に、当該ファイルの inode 番号, 大きさ, mtime を使っています。 Etag: "19ebd-86f-a5f83ea5" のような値が得られます。この計算方法は 1.x と 2.x で微妙に違うようです。
[57] If-Match:
と If-None-Match:
では *
という値が使われることがありますが、これは実体タグではありません。
[2] 実体タグは内容折衝によって同じ URL で複数の表現が提供されている場合や、
鯖の時計が正しくない場合などでも Last-Modified:
の値に頼らずキャッシュを更新できる仕組みとして HTTP/1.1
で導入されました。
[3] 内容折衝など必要以上に複雑な仕組みが HTTP に導入されたことで、 実体タグのような本来必要なかった複雑な仕組みを更に導入する必要が生じたと見ることもできます。
[4] ETag:
が現在使われるのは、ほとんどの場合、静的ファイルを提供する形の鯖だけですが、
そのような形態なら普通 Last-Modified:
と
If-Modified-Since:
で十分実用的に動作するので、
実体タグはプロトコルを複雑化する以外に役に立っていないとすら言えます。
[5] ETag: (>>17) のように、実体タグの設定の誤りによりキャッシュ効率がむしろ悪化する事例もあります。
[6] また >>15 のように実体タグを悪用する例もあります。
[2625] ETagをどう生成するか - 岩本隆史の日記帳 ( ( 版)) <http://d.hatena.ne.jp/IwamotoTakashi/20080826/p2>
[2626] ETagを使ってSpringとHibernateの転送量と負荷を削減する ( ( 版)) <http://www.infoq.com/jp/articles/etags>
[2627] ricollab Web Tech Blog » Blog Archive » ETagについて ( ( 版)) <http://blogs.ricollab.jp/webtech/2008/02/etag/>
[2628] 2.2.5.4 ETag ( ( 版)) <http://msdn.microsoft.com/en-us/library/dd541486.aspx>
[2629] ビューの条件付き処理 — Django 1.4 documentation ( ( 版)) <http://docs.djangoproject.jp/en/latest/topics/conditional-view-processing.html>
"
の間には 0x80-0xFF もobs-text
として認められています >>11。明記されていませんが、これらは生成は禁止しつつ、 受信者は対応しなければならないという意図と推察されます。