ETag 【entity tag】 エンティティタグ

概要

ETag(entity tag)とは、Webコンテンツの伝送に用いられるHTTPの制御情報の一つで、サーバ上の資源の特定の版に一対一に対応する識別子クライアントは受信したコンテンツキャッシュする際にETagを控えておき、次回のアクセス時に問い合わせることで更新されたか知ることができる。

Webサーバクライアントに資源を送信する際、HTTPレスポンスヘッダの「ETag:」フィールドにETagを記載する。ETagは資源(ファイルなど)の特定のバージョンごとに一意であり、同じ資源であっても更新・修正がわれ内容が変化すると新しいに更新される。HTTPヘッダ上でのETagのは「ETag: "0123abcd"」のようにダブルクォーテーション(")で括る。

通常のETagは資源の内容がわずかでも変化すると更新される「強いETag」だが、「W/"6789wxyz"」のように先頭に「W/」を付与した場合は、実質的な内容が同じである限り更新されない「弱いETag」となる。例えば、あるWikiページのコンテンツ部分は更新されていないが、ページ全体で見ると「最近更新されたページ」欄が変化しているといった場合にいちいち再送信しないようにできる。

ETagは資源ごと、版ごとに一意であるという条件を満たせばどのようなルールで生成してもよく(規格では生成方法を定めていない)、Webサーバアプリケーションごとに生成手法は異なっている。よく用いられるのはファイルの内容や最終更新日時から算出したハッシュ値で、ETagそのものには意味や順序などはなく、同一か否か判定する以外の機能は持たない。

キャッシュの制御

Webブラウザなどのクライアントには、受信した資源をストレージ上のファイルとして保存しておき、表示のたびに受信し直さなくてよいようにする「キャッシュ」の仕組みがあるが、キャッシュを作成する際にサーバから添付されたETagも一緒に保存しておく。

次に資源が呼び出された際、クライアントサーバに同じ資源を再度要求するが、HTTPリクエストヘッダに「If-None-Match:フィールドなどを用いて前回取得したETagを記載する。サーバ側は送られてきたETagを現在のものと比較し、更新されていれば資源を再送信、されていなければ「304 Not Modified」応答のみを送信してキャッシュの内容を利用するよう指示する。

更新の衝突回避

WikiWebDAVなどサーバ上の資源の内容をクライアントが更新できるWebアプリケーションの場合には、複数の利用者による更新タイミングがかち合ってしまい、後からわれた更新で内容が上書きされてしまう衝突現象の回避にもETagが用いられる。

クライアントは編集のために取り寄せた資源のETagを記録しておく。更新時にはPUTメソッドなどで資源を送信してサーバ上の資源の上書きを要求するが、このとき取得時のETagをHTTPリクエストヘッダの「If-Match:」フィールドなどに記載する。

サーバは送られてきたETagを現在のものと比較し、一致すれば資源の更新を受け付ける。一致しない場合はクライアントの資源取得から現在までに誰かが内容を更新していることになるため、更新を拒否して「412 Precondition Failedエラーなどでクライアントに衝突発生を知らせる。

(2022.11.1更新)

他の辞典による解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる