業務でキャッシュ関連のトラブルに遭遇しまして、Cache-Controlを適切に設定しているにも関わらず、画像がキャッシュされないというトラブルです。
その際にPragmaヘッダーについても調査したのですが、いくつか分かったことがあるので共有します。
Pragmaヘッダーとは
HTTP/1.0との下位互換のために用意されているヘッダーです。 Cache-Controlが解釈できないブラウザでも動きます。
Pragma は HTTP/1.0 の一般ヘッダーで、実装固有のヘッダーであり、リクエスト - レスポンスチェーンに沿ってさまざまな影響を与えます。 Cache-Control HTTP/1.1 ヘッダーがまだ存在しない HTTP/1.0 キャッシュとの下位互換性のために使用されます。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Pragma
化石のようなヘッダーである
ブラウザキャッシュ無効化で検索すると、よくCache-ControlとPragmaを両方設定する記事を目にします。 私もそれに従って、両方のヘッダーを設定し続けてきました。
気になったため調べたところ、PragmaはHTTP/1.1登場以前のブラウザに向けたヘッダーなので、IE5やNetscape 4.7などかなり古いブラウザが主な対象です。
そのため、Pragmaを書く必要性は少ないと言え、Cache-Controlを適切に記述することのほうが重要です。
Pragma is a legacy of HTTP/1.0 and hasn't been needed since Internet Explorer 5, or Netscape 4.7. Unless you expect some of your users to be using IE5: it's safe to stop using it. https://stackoverflow.com/questions/10314174/difference-between-pragma-and-cache-control-headers
Pragmaにno-cache以外のディレクティブが存在するのか
MDNを読む限り、Pragmaに指定できるディレクティブは、no-cacheしか確認できませんでした。
少なくとも私の理解では、no-cache以外のキャッシュユースケースでは、そもそもPragmaヘッダーを送らないとなります。
Pragma: no-cache
あとがき
MDNのHTTPキャッシュが、詳細に書いてあり良さそうです。 まだ未読なのですが、さらっと見た限り丁寧に書かれているので、私も時間を見つけて読みたいと思います。