⭐️HTTP条件付きリクエスト

参考: https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Conditional_requests

リクエストに前提条件を付け、満たされたときだけサーバーに実行させる仕組み。 条件は「リソースが今この状態か?」の判定で、判定材料を バリデーターと呼ぶ。

バリデーター正体
ETagサーバーが付けるリソースの版ID
Last-Modified最終更新日時

ETag はどう作られるのか

仕様(RFC 9110 §8.8.3)は中身を決めていない。サーバーが好きに決める不透明な文字列で、クライアントは一致するかを見るだけ。実装は 2 派に分かれる。

  • メタデータから作る — nginx は "最終更新時刻-サイズ" を 16 進で並べるだけ("689f1a2c-1f4b")。本文を読まずに作れて速い
  • 本文のハッシュ — S3 の ETag は基本的に本文の MD5

ハッシュは本文全体を読む必要があるので、静的ファイル配信では前者が選ばれやすい。

キャッシュ検証で使うヘッダー

ヘッダー成立条件
If-None-MatchETag が一致しない
If-Modified-Since指定日時より後に更新された(ETag がない場合の代替)