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 を明示する必要がある。

#参考文献