304が返らない時の診断手順
「ETagを返しているのに毎回200になる」ケースは、応答側と再リクエスト側の条件付きヘッダー連携が崩れていることが多いです。
症状の定義
- 同一URLを再取得しても 304 にならず 200 が続く
- ETag または Last-Modified は応答に含まれている
- 更新頻度が低いリソースでも再ダウンロードが発生する
診断ステップ
- 1) Cache Diagnostic で Response の validator 有無を確認する
- 2) If-None-Match Inspect で再リクエストに If-None-Match が乗っているか確認する
- 3) If-Modified-Since Inspect で日時系validatorの往復を確認する
- 4) ETag Inspect で弱/強ETagの扱い差を確認する
- 5) CDN経由の場合は HTTP Cache Mismatch で層差分を確認する
よくある原因
- 再リクエスト側で If-* ヘッダーが送信されていない
- 配信経路で ETag が都度変わる(圧縮差分・サーバー差分)
- Cache-Control が no-store 等になっており再検証以前に保存されない
- 時刻系のズレで If-Modified-Since 判定が不安定
修正チェックリスト
- ETag / Last-Modified のどちらか(可能なら両方)を安定して返す
- no-store と no-cache の意図を使い分ける
- 再検証で 200→304 が再現することをリリース前に確認する
- CDN・オリジンで validator 値を一致させる
使うツール
- Cache Diagnostic
- ETag Inspect
- If-None-Match Inspect
- If-Modified-Since Inspect
- Last-Modified Inspect
- Cache Response Analyzer
FAQ
- ETag があるのに 304 にならないのはなぜですか?
- 再リクエスト時に If-None-Match が送られていない、または経路上で ETag が変わっている可能性が高いです。
- Last-Modified だけでも 304 は使えますか?
- はい。If-Modified-Since との往復が成立すれば可能です。可能なら ETag も併用すると安定します。
参照仕様
次に見る(診断順)
site_map ルールに基づいて、次に確認すべきページを表示しています。
- Cache Diagnostic — キャッシュ関連ヘッダーを横断診断
- ETag Inspect — ETag と If-None-Match の整合を解析
- If-None-Match Inspect — If-None-Match を解析して再検証条件を確認
- If-Modified-Since Inspect — If-Modified-Since を解析して条件付き取得を確認
- Last-Modified Inspect — Last-Modified / If-Modified-Since を解析
- Cache Response Analyzer — レスポンスヘッダーからキャッシュ可否を判定
- 症状別診断ガイド(入口) — キャッシュ/CORS/JWT/MIME系の実運用トラブルを、症状起点で最短導線に振り分ける総合ハブ
- 更新したのに反映されない時の診断手順 — HTML/API/静的アセット別にキャッシュ方針を確認し、反映遅延を短時間で切り分ける
同テーマの導線
事例クラスタ一覧
実運用トラブル別に、最短の診断ルートへ入るためのシナリオ集
- 症状別診断ガイド(入口) — キャッシュ/CORS/JWT/MIME系の実運用トラブルを、症状起点で最短導線に振り分ける総合ハブ
- 更新したのに反映されない時の診断手順 — HTML/API/静的アセット別にキャッシュ方針を確認し、反映遅延を短時間で切り分ける
- CORS preflight失敗時の診断手順 — OPTIONS応答、Allow-*、Origin条件を順に確認して preflight 失敗を解消する
- JWT 401/403 切り分け手順 — Authorization / WWW-Authenticate / claims / 署名検証を連携して 401 と 403 を分離する
- 429/503で再試行が止まらない時の診断手順 — Retry-After の秒/日時解釈とクライアント実装差を切り分け、過剰再試行を抑える
- nosniffでJS/CSSがブロックされる時の診断手順 — Content-Type と nosniff の不一致、404/302混入、配信経路の上書きを切り分ける
- Set-Cookie が保存されない時の診断手順 — Domain/Path/Secure/SameSite を順に確認して Cookie 非保持の原因を切り分ける
- OAuth戻りでログインが維持されない時の診断手順 — IdP戻りで起きる Cookie 不達を SameSite・Secure・Path/Domain・競合で順に切り分ける
- 同名Cookie競合で不安定な時の診断手順 — 同名CookieのPath/Domain差分・上書き順・送信衝突を整理して不安定挙動を解消する
- Cookie障害の運用チェックリスト — 保存失敗・OAuth戻り失敗・同名競合を一本化し、トリアージから恒久対策まで運用手順を標準化する