【イータグ】

ETag とは?

💡 リソースの「指紋」——変わったかどうかを一瞬で見分けるIDタグ
📌 このページのポイント
ETag — リソースの変更検出フロー ① 初回リクエスト ブラウザ GET /style.css サーバー 200 OK ETag: "a1b2c3" + レスポンス本体 ② 再リクエスト(変更なし) ブラウザ If-None-Match: "a1b2c3" サーバー 304 Not Modified 本体なし → キャッシュ再利用(高速!) ③ 再リクエスト(変更あり) ブラウザ If-None-Match: "a1b2c3" サーバー 200 OK(新しいデータ) ETag: "d4e5f6" + 新しい本体 強いETag: "abc" = バイト完全一致 / 弱いETag: W/"abc" = 意味的に同等
ETagによる条件付きリクエストの流れ
ひよこ ひよこ

ETagって何のためにあるの?

ペンギン先生 ペンギン先生

「このリソース、前に取ったときから変わってる?」をサーバーに効率よく聞くための仕組みだよ。ETagはリソースの中身から生成されるハッシュ値みたいなもので、中身が変われば値も変わるんだ

ひよこ ひよこ

具体的にはどう使うの?

ペンギン先生 ペンギン先生

最初のリクエストでサーバーが「ETag: "abc123"」を返す。次にブラウザが同じリソースを要求するとき「If-None-Match: "abc123"」をつけて送る。サーバーは現在のETagと比較して、同じなら304 Not Modifiedを返すんだ。本体を送らなくて済むから速いよ

ひよこ ひよこ

Last-Modifiedっていうのもあるよね?違いは何なの?

ペンギン先生 ペンギン先生

Last-Modifiedは「最終更新日時」で秒単位の精度しかない。1秒以内に複数回更新されると区別できないんだ。ETagはコンテンツのハッシュだから、どんな小さな変更も検出できる。両方併用するのがベストプラクティスだよ

ひよこ ひよこ

弱いETagと強いETagがあるって聞いたけど、何が違うの?

ペンギン先生 ペンギン先生

強いETag("abc123")はバイト単位で完全一致を保証する。弱いETag(W/"abc123")は「意味的に同等」という緩い一致だよ。例えば広告の表示位置だけ違うページは弱いETagで同一とみなせる。Range Requestには強いETagが必須だから、用途に応じて使い分けるんだね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ETag」って出てきたら「リソースが変わったか確認するためのバージョン番号」と思えればだいたいOK!
📖 おまけ:英語の意味
「Entity Tag」 = エンティティタグ
💬 Entity(実体)のTag(札)で、リソースに貼られた「これが最新版だよ」という名札のようなものだよ
← 用語集にもどる