Etag

ETag: ヘッダー (HTTP)

[1] ETag: ヘッダーは、選択された表現実体タグを表します。

仕様書

意味

[12] ETag: ヘッダーは、選択された表現の、 要求の処理の完了の時点での実体タグを表します >>11

構文

[16] ETag: ヘッダーの値は、 実体タグ (entity-tag) です >>11

  1. 実体タグ

文脈

[48] 起源鯖は、合理的かつ一貫的に変更を検出できる場合には、 選択された表現ETag: を送信するべきです >>11

[8] 起源鯖は、 GETHEAD に対する 200 応答では、 ETag:Last-Modified: も、送ることができるなら送るべきです。 性能上その他の理由で強い実体タグより弱い実体タグが好ましいなら、 それでも構いません。 >>11

[55] 指定してはならない文脈については If-Match: の項を参照。

[22] 226 応答実体タグETag: に含めなければなりません >>21

[56] 304 の項も参照。

処理モデル

[51] クライアントは、起源鯖実体タグを提供していたなら、 キャッシュ検証を行う要求If-Match:If-None-Match:実体タグを送信しなければなりません >>11

[52] クライアントは、起源鯖Last-Modified: のみを提供していた場合に、キャッシュの全部分の検証を行う要求If-Modified-Since:Last-Modified 値を送信するべきです >>11

[53] クライアントは、 HTTP/1.0 起源鯖Last-Modified: のみを提供していた場合に、キャッシュの一部分の検証を行う要求If-Unmodified-Since:Last-Modified: 値を送信して構いません >>11利用者エージェントは問題があった場合にこれを無効にする方法を用意するべきです >>11

[54] クライアントは、起源鯖実体タグLast-Modified の両方を提供していた場合に、キャッシュ検証を行う要求に両方を含めるべきです >>11

プライバシー

[15] 実体タグを参照。

DAV:getetag 特性 (WebDAV)

[29] DAV:getetag 特性は、 accept header なしで GET したときに返されるであろう ETag: ヘッダーの値を表します >>28

[30] 値は実体タグです >>28ETag: ヘッダーOWS が含まれる場合でも、値にはこれを含めるべきではありません >>23

[31] この値はが制御するもので、この特性保護特性です >>28

[32] COPYMOVE の後は、終点資源の最終的な状態により値が決まります >>28

[33] WebDAV に従う資源ETag: ヘッダーを返すものは、 DAV:getetag 特性を定義しなければなりません >>28

歴史

[2621] Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout ( ( 版)) http://www.w3.org/1999/04/Editing/

[2617] Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout ( 版) http://www.w3.org/1999/04/Editing/01

[14] RFC 2068 2616 (HTTP/1.1) 14.2019 ETag

The ETag entityresponse-header field defines

provides the current value of]] the

entity tag for the

associated]] requested

variant. The headers used with entity tags are described in sections 14.20, 14.25

14.24]], 14.26 and

14.4344. The entity tag

may]] MAY

be used for comparison with other entities from the same resource (see section 13.3.23).

[6] ETag

実体]]応答頭欄は、
関連付けられ]]要求された変種の実体札を定義の現在値を提供します。

実体札とともに使う頭は14.20節, 14.25節

14.24節]], 14.26節,

14.4344

(Vary: (>>11))]] で説明しているいます。

実体札は同じ資源のほかの実体との比較に使っても構いません構いません (13.3.23節参照)。

Examples:

  • [3] ETag: "xyzzy"
  • [4] ETag: W/"xyzzy"
  • [5] ETag: ""

[2618] RFC 3143 - Known HTTP Proxy/Caching Problems ( 版) http://tools.ietf.org/html/rfc3143#appendix-A.2.3

[2623] RFC 7252 - The Constrained Application Protocol (CoAP) ( ( 版)) http://tools.ietf.org/html/rfc7252#section-5.10.6

実装

[13] ETag:静的ファイルシステム上のデータを提供する生成することが多いですが、 動的に生成されるページではあまり使われません。

[17] 負荷分散その他の目的で複数のから資源が供給される場合、 それらの ETag: の精製方法が異なると、 キャッシュが思うように動作しないことがあります。 Apache などは既定の状態ではファイルinode番号ETag: を使うので、何の設定もしないとごとに同じファイルでも異なる ETag: が使われ、キャッシュが機能しません。

[2619] 堀愚霊瑠の指摘で気付いた、はてなスターの静的ファイルとか想像以上にアレな件 - にぽたん研究所 ( 版) http://blog.livedoor.jp/nipotan/archives/51186026.html

[2620] Squid 2.6.STABLE21 Configuration File: broken_vary_encoding ( 版) http://www.squid-cache.org/Versions/v2/2.6/cfgman/broken_vary_encoding.html

[2622] Protocol Reference - Google Data APIs — Google Developers ( ( 版)) https://developers.google.com/gdata/docs/2.0/reference#ResourceVersioning

[24] 次のような例が挙げられています >>11

メモ

[7] 201 (作成済み) 応答では、 作成された資源についての実体札を ETag 頭欄に入れることができます。他の応答の場合 (応答実体についての実体札。) とは異なるので注意が必要です。

[9] mnot’s Web log: ETags, ETags, ETags (2007-08-09 23:20:31 +09:00 版) http://www.mnot.net/blog/2007/08/07/etags

[10] Sam Ruby: Etag vs Encoding ( 版) http://www.intertwingly.net/blog/2007/09/30/Etag-vs-Encoding

[34] よくデータの同一性検査に MD5 値を使ったりしますが、それを一般的にしたようなものであると理解すれば良いでしょう。

[40] gsnedders / HTTP Entity Tags Confusion ( 版) http://gsnedders.com/http-entity-tags-confusion

[2625] 8 Ways to Save Bandwidth on your RSS Feed ( (Peter Freitag 著, 版)) http://www.petefreitag.com/item/642.cfm

[2626] DSAS開発者の部屋:負荷分散環境でブラウザキャッシュが効かないときは - ETagの解説 - ( ( 版)) http://dsas.blog.klab.org/archives/50602499.html

[2627] Platform API Reference | Heroku Dev Center ( ( 版)) https://devcenter.heroku.com/articles/platform-api-reference#data-integrity

[2628] PublisherEfficiency - pubsubhubbub - How to maximize the efficiency of publishing Atom feeds - A simple, open, webhook based pubsub protocol & open source reference implementation. - Google Project Hosting ( ( 版)) https://code.google.com/p/pubsubhubbub/wiki/PublisherEfficiency#Feed_windowing

[18] Sam Ruby: Vary: ETag ( 版) http://www.intertwingly.net/blog/2004/09/11/Vary-ETag

[35] Hashes and ETags: Best Practices - Cloud Storage — Google Cloud Platform ( 版) https://cloud.google.com/storage/docs/hashes-etags

Historically, an object’s MD5 was expressed via the ETag header. This behavior will continue for non-composite objects in the XML API, but since composite objects don’t support MD5 hashes, users should make no assumptions about those ETags except that they will change whenever the underlying data changes, per the IETF specification for HTTP/1.1.

[36] Linked Data Platform Paging 1.0 ( 版) https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp-paging.html#h-ldpr-notify-changes

[37] RFC 8132 - PATCH and FETCH Methods for the Constrained Application Protocol (CoAP) () https://tools.ietf.org/html/rfc8132#section-2.3.2

[38] RFC 4791 - Calendaring Extensions to WebDAV (CalDAV) () https://tools.ietf.org/html/rfc4791#section-2

o MUST support ETags [RFC2616] with additional requirements

specified in Section 5.3.4 of this document;

[39] RFC 4791 - Calendaring Extensions to WebDAV (CalDAV) () https://tools.ietf.org/html/rfc4791#section-5.3.4

[41] RFC Errata Report » RFC Editor () https://www.rfc-editor.org/errata_search.php?rfc=4791

[42] curl - How To Use (, ) https://curl.haxx.se/docs/manpage.html#--etag-compare