--- title: Cache-Control slug: Web/HTTP/Headers/Cache-Control tags: - Cache-Control - HTTP - HTTP ヘッダー - Reference - 一般ヘッダー translation_of: Web/HTTP/Headers/Cache-Control ---
Cache-Control
は HTTP のヘッダーで、リクエストとレスポンスの両方でキャッシュのためのディレクティブ (指示) が格納されています。リクエストで指定されたディレクティブは、レスポンスでも同じディレクティブを使用しなければならないということではありません。
ヘッダー種別 | {{Glossary("General header", "一般ヘッダー")}} |
---|---|
{{Glossary("Forbidden header name", "禁止ヘッダー名")}} | いいえ |
{{Glossary("CORS-safelisted response header", "CORS セーフリストレスポンスヘッダー")}} | はい |
キャッシュのディレクティブには、以下のような規則があります。
クライアントからの HTTP リクエストで使用される可能性がある、標準的な Cache-Control
ディレクティブです。
Cache-Control: max-age=<seconds> Cache-Control: max-stale[=<seconds>] Cache-Control: min-fresh=<seconds> Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: only-if-cached
サーバーからの HTTP レスポンスで使用される可能性がある、標準的な Cache-Control
ディレクティブです。
Cache-Control: must-revalidate Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: public Cache-Control: private Cache-Control: proxy-revalidate Cache-Control: max-age=<seconds> Cache-Control: s-maxage=<seconds>
Cache-Control
ディレクティブの拡張は、 HTTP キャッシュ標準のコアドキュメントには含まれていません。対応状況については互換性一覧表を確認してください。解釈できないユーザーエージェントはこれらを無視します。
Cache-Control: immutable Cache-Control: stale-while-revalidate=<seconds> Cache-Control: stale-if-error=<seconds>
ブラウザーがレスポンスをキャッシュするのは通常以下の場合です。
Cache-Control
に no-store
がないか、 もしプロキシの場合は private
がなく、 かつpublic
, max-age
s-maxage
の何れかが Cache-Control
に指定されている、またはpublic
private
no-store
を使用してください。このディレクティブにはレスポンスがキャッシュに保存されないようにする効果はありません。no-cache
no-cache
を immutable
と組み合わせて使用することはできません。レスポンスがどのキャッシュにも保存されないようにするには、代わりに no-store
を使用してください。このディレクティブにはレスポンスがキャッシュに保存されないようにする効果はありません。no-store
max-age=0
が暗黙で含まれます。 must-revalidate
は意味を持ちません。再検証を行うにはレスポンスがキャッシュに格納されている必要がありますが、 no-store
はこれを抑止するからです。max-age=<seconds>
Expires
とは異なり、このディレクティブはリクエスト時刻からの相対時間です。s-maxage=<seconds>
max-age
または Expires
ヘッダーを上書きしますが、共有キャッシュ (プロキシなど) だけのためのものです。プライベートキャッシュでは無視されます。max-stale[=<seconds>]
min-fresh=<seconds>
stale-while-revalidate=<seconds>
{{Experimental_Inline}}stale-while-revalidate
」を参照してください。stale-if-error=<seconds>
{{Experimental_Inline}}must-revalidate
proxy-revalidate
must-revalidate
と似ていますが、共有キャッシュ (プロキシなど) にのみ適用されます。プライベートキャッシュでは無視されます。immutable
If-None-Match
や If-Modified-Since
など) を送ってはいけません。この拡張機能を実装していないクライアントは、 HTTP の仕様に従ってこれらの拡張機能を無視しなければなりません。 Firefox では、 immutable
は https://
トランザクションでのみ有効です。詳しくは、こちらのブログ記事を参照してください。no-transform
only-if-cached
If-None-Match
などの条件付きヘッダーは設定すべきではありません。サーバーがレスポンスの一部として only-if-cached
を設定しても効果はありません。リソースのキャッシュを無効にするには、以下のレスポンスヘッダーを送ることができます。
Cache-Control: no-store
no-store
ディレクティブは、新しいリソースがキャッシュされることを防ぎますが、過去のリクエストの結果としてキャッシュ済みの古いリソースが応答するのを防ぐことはできません。 max-age=0
を設定すると、キャッシュが強制的に再検証されます(キャッシュがクリアされます)。
Cache-Control: no-store, max-age=0
Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0
変更されないアプリケーション内のファイルについては、通常、以下のレスポンスヘッダーを送信することで積極的にキャッシュを行うことができます。これには、例えば画像、 CSS ファイル、 JavaScript ファイルなど、アプリケーションによって提供される静的なファイルが含まれます。加えて、 {{HTTPHeader("Expires")}} ヘッダーも参照してください。
Cache-Control: public, max-age=604800, immutable
no-cache
または max-age=0
を指定すると、クライアントはリソースをキャッシュすることができ、それを使用する前に毎回再検証をしなければならないことを示します。これは、 HTTP リクエストが毎回発生することを意味しますが、コンテンツが有効であれば、 HTTP 本文のダウンロードを飛ばすことができます。
Cache-Control: no-cache Cache-Control: no-cache, max-age=0
仕様書 | 状態 | 備考 |
---|---|---|
{{RFC(8246, "HTTP Immutable Responses")}} | IETF RFC | |
{{RFC(7234, "Hypertext Transfer Protocol (HTTP/1.1): Caching")}} | IETF RFC | |
{{RFC(5861, "HTTP Cache-Control Extensions for Stale Content")}} | IETF RFC | 初回定義 |
{{Compat("http.headers.Cache-Control")}}
Cache-Control
for civilians