【イータグ】

ETag とは?

最終更新:
💡 保存した内容と照合する、HTTPの識別タグ

HTTPで、選択されたリソース表現を識別するためにサーバーが付けるタグ。条件付きリクエストによるキャッシュの確認や、更新時の条件判定に使われる。

📌 このページのポイント
ETag:保存したタグで再確認 ① 初回のGET ブラウザ サーバー GET /style.css 200 + 本体 ETag: "a1" ② 保存したタグで再確認 ブラウザ サーバー If-None-Match: "a1" 一致:304(本体なし) 保存した内容を再利用 ③ タグが一致しない場合 ブラウザ サーバー If-None-Match: "a1" 正常取得:200 + 本体 ETag: "b2" GETの再確認の例。生成方法はサーバー次第
青はGETの要求、緑はブラウザへの応答。304では本体を送らず保存した内容を使います。タグはハッシュに限らず、弱いタグでの比較はバイト単位の完全一致を意味しません。
ひよこ ひよこ
ETagって何のためにあるの?
ペンギン先生 ペンギン先生
前に保存した内容を使えるか、サーバーへ確認するための識別タグだよ。値はサーバーが決める。中身のハッシュを使う方法もあるけど、内部の版番号などでも作れるので、必ずハッシュとは限らないんだ。
ひよこ ひよこ
具体的にはどう使うの?
ペンギン先生 ペンギン先生
最初のGETでETagが返ったら、内容と一緒に保存するよ。再確認するGETでIf-None-Matchにその値を付ける。現在の表現とタグが一致すれば304 Not Modifiedとなり、本体を送らず保存済みの内容を使えるんだ。
ひよこ ひよこ
タグが変わっていたら?
ペンギン先生 ペンギン先生
その条件では304にならず、正常に取得できれば200と新しい本体が返るよ。ETagだけで常に最速になるわけではないし、保存できるか、いつ再確認するかはCache-Controlなどのキャッシュ規則も関係するんだ。
ひよこ ひよこ
強いETagと弱いETagは何が違うの?
ペンギン先生 ペンギン先生
強いタグは表現のデータの違いを厳密に区別し、弱いタグはサーバーが意味的に同等と判断した表現を扱えるよ。弱いタグはW/付き。If-None-Matchでは弱い比較を使うので、同じタグでもバイト単位で完全一致とは限らないんだ。
ひよこ ひよこ
Last-Modifiedとの違いや、更新への使い道は?
ペンギン先生 ペンギン先生
Last-Modifiedは更新日時で、HTTPの日付は秒単位だよ。ETagは時刻以外でも識別できる。両方を使う場合、If-None-MatchがあるとIf-Modified-Sinceは無視される。更新ではIf-Matchに強いタグを付け、他の人の更新後に上書きするのを防ぐ条件にも使えるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ETag」って出てきたら「HTTPで内容の版を照合する識別タグ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Entity Tag」 = 実体を識別するタグ
💬 Entity(実体)とTag(札)を組み合わせた名前。最新版の保証ではなく、受け取った表現を照合する札だよ。

参考資料

← 用語集にもどる