ETag HTTP レスポンスヘッダーは、特定のバージョンのリソースの識別子です。Web サーバーはコンテンツが変更されていない場合に完全なレスポンスを送信する必要がないため、キャッシュの効率を高め、帯域幅を節約できます。 一方、コンテンツが変更された場合、etags はリソースの同時更新がお互いを上書きする("空中衝突")のを防ぐのに役立ちます。

指定された URL のリソースが変更された場合は、新しい Etag 値を生成する必要があります。したがって Etags はフィンガープリントに似ており、一部のサーバーでの追跡目的でも使用される可能性があります。これらを比較することで、リソースの2つの表現が同じかどうかを素早く判断できますが、トラッキングサーバーによって無限に保持されるように設定することもできます。

ヘッダータイプ Response header
Forbidden header name no

構文

ETag: W/"<etag_value>"
ETag: "<etag_value>"

ディレクティブ

W/ Optional
'W/' (大文字と小文字を区別) は弱いバリデータが使用されていることを示します。弱いバリデータは生成が簡単ですが、比較にはあまり役立ちません。強力なバリデータは比較には理想的ですが、効率的に生成するのは非常に困難です。同じリソースの2つの表現の弱い Etag 値は、意味的には同等ですが、バイトごとに同一ではありません。
"<etag_value>"
エンティティタグは要求されたリソースを一意的に表します。それらは("675af34563dc-tr34"のように) 二重引用符で囲まれた ASCII 文字列です。ETag 値が生成される方法は指定されていません。多くの場合、コンテンツのハッシュ、最後の変更タイムスタンプのハッシュ、またはリビジョン番号のみが使用されます。たとえば、MDN は Wiki コンテンツの16進数のハッシュを使用します。

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ETag: W/"0815"

空中衝突の回避

ETagIf-Match ヘッダの助けを借りて、編集の空中衝突を検出することができます。

たとえば MDN を編集する場合、現在の Wiki コンテンツはハッシュされ、レスポンスで Etag に入れられます:

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

wikiページに変更を保存 (データの投稿) するとき、POST リクエストには、新規かどうかをチェックする ETag 値を含む If-Match ヘッダーが含まれます。

If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

ハッシュが一致しない場合は、ドキュメントが途中で編集され、 412 Precondition Failed エラーがスローされたことを意味します。

変更されていないリソースのキャッシング

ETag ヘッダーの別の典型的な使用例は、変更されていないリソースをキャッシュすることです。ユーザが (ETag が設定されている) 指定された URL を再度訪問した場合、それが古すぎて使用可能とはみなされない場合、クライアントは If-None-Match ヘッダフィールドに ETag の値を送ります:

If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

サーバーは、クライアントの ETag (If-None-Match で送信された) を現在のバージョンの ETag と比較し、両方の値が一致すると(つまりリソースは変更されていない)、サーバーは 304 Not Modified ステータスをレスポンスボディなしで返送します。このステータスはキャッシュされたレスポンスのバージョンがまだ使用可能 (新しい) であることをクライアントに通知します。

仕様

仕様 タイトル
RFC 7232, セクション 2.3: ETag Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests

ブラウザの実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung Internet
基本対応Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 ありIE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 ありOpera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 あり

凡例

完全対応  
完全対応

関連情報

ドキュメントのタグと貢献者

このページの貢献者: silverskyvicto
最終更新者: silverskyvicto,