Cache-Control: no-cache は何を意味する?
選択肢を選ぶと解説が表示されます
正解: A. キャッシュに保存してよいが、再利用前にオリジンへ再検証が必要
名前から「キャッシュしない」と読みがちだが、仕様上の意味は異なる。
no-cache はレスポンスの保存自体は許す。ただし、キャッシュ済みの応答を使う前にオリジンサーバへ再検証しなければならない、という意味である。一方、本当に保存させたくない場合に使うのが no-store である。
機密データを「どこにも残したくない」つもりで no-cache だけを付けると、ブラウザなどに残る可能性がある。意図が「保存禁止」なら no-store を選ぶ。
実害の例として、2020 年ごろ Twitter のダイレクトメッセージが Firefox のブラウザキャッシュに残る問題があった。DM 応答には Cache-Control が無く、代わりに Pragma: no-cache が付いていた。Pragma は HTTP/1.0 時代のキャッシュ制御用ヘッダで、いまは Cache-Control の互換用として残っている。Pragma: no-cache は仕様上リクエスト向けの意味であり、レスポンスの保存禁止にはならない。しかも no-cache 自体も「保存するな」ではなく「再利用前に再検証」なので、意図した防御にならない。残したくない応答には Cache-Control: no-store を明示する必要がある。
参考文献
- Cache-Control - MDN —
no-cacheは保存可・再利用前に再検証、no-storeは保存禁止 - Twitter Direct Message Caching and Firefox - Mozilla Hacks —
Pragma: no-cacheでは不十分で DM がキャッシュに残った事例(Editor’s Note) - HTTPWTF: No-cache means “do cache” — 誤解しやすいキャッシュディレクティブの整理