--- 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 に指定されている、またはpublicprivateno-store を使用してください。このディレクティブにはレスポンスがキャッシュに保存されないようにする効果はありません。no-cacheno-cache を immutable と組み合わせて使用することはできません。レスポンスがどのキャッシュにも保存されないようにするには、代わりに no-store を使用してください。このディレクティブにはレスポンスがキャッシュに保存されないようにする効果はありません。no-storemax-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-revalidateproxy-revalidatemust-revalidate と似ていますが、共有キャッシュ (プロキシなど) にのみ適用されます。プライベートキャッシュでは無視されます。immutableIf-None-Match や If-Modified-Since など) を送ってはいけません。この拡張機能を実装していないクライアントは、 HTTP の仕様に従ってこれらの拡張機能を無視しなければなりません。 Firefox では、 immutable は https:// トランザクションでのみ有効です。詳しくは、こちらのブログ記事を参照してください。no-transformonly-if-cachedIf-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