Cache-Control: no-cache は、名前から「キャッシュしない」と読まれやすいです。仕様上の意味は違います。レスポンスの保存自体は許したうえで、キャッシュ済みの応答を使う前にオリジンサーバへ再検証しなければならない、という指示です。

本当に保存させたくない場合に使うのが no-store です。機密データをどこにも残したくないつもりで no-cache だけを付けると、ブラウザなどのキャッシュに残る可能性があります。意図が保存禁止なら no-store を選びます。

共有キャッシュ(CDN)だけに置きたくない場合は private です。no-cache とも no-store とも別の指示です。

#Pragma: no-cache では足りない

2020 年ごろ、Twitter のダイレクトメッセージが Firefox のブラウザキャッシュに残る問題がありました。DM 応答には Cache-Control が無く、代わりに Pragma: no-cache が付いていました。

Pragma は HTTP/1.0 時代のキャッシュ制御用ヘッダで、いまは Cache-Control の互換用として残っています。Pragma: no-cache は仕様上リクエスト向けの意味であり、レスポンスの保存禁止にはなりません。no-cache 自体も保存禁止ではないので、残したくない応答には Cache-Control: no-store を明示します。

#参考文献