このすみノート

Webエンジニアが技術や趣味を書くブログです。

Pragmaはno-cacheしかないHTTPヘッダーらしい

業務でキャッシュ関連のトラブルに遭遇しまして、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キャッシュが、詳細に書いてあり良さそうです。 まだ未読なのですが、さらっと見た限り丁寧に書かれているので、私も時間を見つけて読みたいと思います。

developer.mozilla.org