HTTP cache / validator / 304

ETag・Last-Modified・Cache-Controlを分けて304を確認

freshnessと再検証を混同しないよう、合成headerで判断を確認します。実URLへ接続せず、確認票だけを端末内へ保存します。

4つの判断軸

ETagは内容のvalidator、Last-Modifiedは更新日時のvalidator、Cache-Controlはfreshnessと再検証条件です。304は条件付きGETのvalidatorが一致した時の応答です。

ETag + If-None-Match → 304 / Last-Modified + If-Modified-Since → 304 / Cache-Control: no-cache → 利用前に再検証 / Cache-Control: max-age → 期限まではfresh
確認
ETag応答の識別子とIf-None-Matchの一致を確認。
Last-Modified日時とIf-Modified-Sinceの一致を確認。
no-cache保存禁止ではなく、利用前の再検証。
max-age期限内はfresh、期限後は再検証。

確認の境界

  1. レスポンスのvalidatorを記録する。
  2. 条件付きrequestの値と比較する。
  3. 一致なら304、不一致なら新しい本文と判断する。
  4. cache-controlの保存・freshness・再検証を分けて引き継ぐ。

このページは実サーバーへ接続しません。実際の配信設定は対象サービスのログと承認済み手順で確認してください。

6つの合成case

case結果
etag-match-304304 Not Modified
last-modified-304304 Not Modified
cache-control-no-cacheRevalidate
cache-control-max-ageFresh until stale
validator-mismatch200 OK / new representation
unsupported-network-requestReject