1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cache-Controlヘッダとキャッシュを防ぐ方法

Last updated at Posted at 2025-06-09

そもそも、Cache-Controlヘッダとは?

Cache-Controlヘッダは、ブラウザやCDN等のプロキシサーバなどに対して、コンテンツをどのようにキャッシュするかの指示を与えるためのHTTPヘッダです。

ブラウザ、CDN、プロキシサーバなどに「このデータはどのくらい保存していいか」「いつ再取得すべきか」などのルールを伝える役割を持ちます。

これにより、Webアプリの高速化、セキュリティ、サーバ負荷軽減を期待できます。

ただし、キャッシュを禁止すべきケースもあります。
例えば、ログイン後のマイページなどのキャッシュがCDN等に残存していた場合は、誤って他ユーザーに表示されるリスクがあります。
このようなケースではキャッシュを残さないように設定する必要があります。

基本構文

Cache-Controlヘッダは下記のように記載します。

Cache-Control: ディレクティブA, ディレクティブB, ...

具体例として、下記のように記載します。

Cache-Control: no-cache, no-store, must-revalidate

主なディレクティブ

ディレクティブ名 説明
no-cache キャッシュされた内容の使用前に、必ずサーバーへ確認を要求する
no-store コンテンツをキャッシュに格納しない
must-revalidate 有効期限切れのキャッシュを利用する場合は必ずオリジンに問い合わせを行う
public 共有キャッシュ(プロキシなど)による保存を許可
private ローカルへのキャッシュ格納のみ許可(共有キャッシュ禁止)
max-age=秒数 キャッシュの有効期限(秒単位)
s-maxage=秒数 CDNやプロキシ用の max-age 指定(max-age より優先)
immutable リソースが絶対に変わらないことを示す(再検証不要)

キャッシュを防ぐにはどうすべきか?

上記記載を踏まえ、HTTPヘッダを設定する際にキャッシュを防ぐにはどうすべきなのか考えてみました。

結果、no-store があれば最低限のキャッシュによるセキュリティ対策は考慮されているものの、各CDNやProxy上でのディレクティブの解釈や仕様のブレが発生します。

この場合、no-store のみでは不十分な可能性があるため、private, no-cache, no-store, must-revalidate の4つを指定すること必要があるようです。

このため、キャッシュをどうしても禁止したい、防ぎたい場合には、private, no-cache, no-store, must-revalidate の4つを指定して、キャッシュをProxy上に残さない設定を忘れないようにしましょう。

【参考】

  1. https://turningp.jp/network_and_security/http_header-cache
  2. https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Caching#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%81%AA%E3%81%84
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?