この翻訳は不完全です。英語から この記事を翻訳 してください。

Cache-Control 一般ヘッダーフィールドは、要求と応答の両方のキャッシュ規則を指定するために用います。キャッシュの指定は単一方向で、つまり、要求の定義が応答の定義と同じにはなりません。

ヘッダー種別 一般ヘッダー
禁止ヘッダー名 いいえ
CORS 対応応答ヘッダー はい

構文

ディレクティブは大文字と小文字の区別をせず、任意の引数を持つことができ、そこには、トークンや quoted-string (複数の単語を""で囲んだ文字列) の書式形式で使用できます。複数指定する場合、コンマで区切ることで指定可能となります。

要求時のキャッシュ指定について

クライアントからの 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 ディレクティブの拡張

Cache-Control ディレクティブの拡張は、主な HTTP のキャッシュ標準ドキュメントには含まれていません。詳しくは、互換性一覧表をご確認ください。

Cache-Control: immutable 
Cache-Control: stale-while-revalidate=<seconds>
Cache-Control: stale-if-error=<seconds>

ディレクティブ

キャッシュ可能性

public
この場合の応答は任意のキャッシュによってキャッシュされます。
private
この場合の応答は単一ユーザー向けであり、共有キャッシュに保存してはいけません。プライベートキャッシュには応答を保持することができます。
no-cache
キャッシュコピーを破棄する前に、検証のためにキャッシュが元のサーバーへ要求を送ることを強制します。
only-if-cached
Indicates to not retrieve new data. This being the case, the server wishes the client to obtain a response only once and then cache. From this moment the client should keep releasing a cached copy and avoid contacting the origin-server to see if a newer copy exists.

有効期限

max-age=<seconds>
リソースが最新であるとみなされる最大の時間を指定します。 Expiresとは対称的に、このディレクティブはリクエストした時間との相対的な値です。
s-maxage=<seconds>
max-age または Expires ヘッダーよりも優先されますが、 共有キャッシュ (プロキシーやCDNなど) にのみ適用されプライベートキャッシュには適用されません。
max-stale[=<seconds>]
Indicates that the client is willing to accept a response that has exceeded its expiration time. Optionally, you can assign a value in seconds, indicating the time the response must not be expired by.
min-fresh=<seconds>
Indicates that the client wants a response that will still be fresh for at least the specified number of seconds.
stale-while-revalidate=<seconds>
Indicates that the client is willing to accept a stale response while asynchronously checking in the background for a fresh one. The seconds value indicates for how long the client is willing to accept a stale response.
stale-if-error=<seconds>
Indicates that the client is willing to accept a stale response if the check for a fresh one fails. The seconds value indicates for how long the client is willing to accept the stale response after the initial expiration.

再検証と再読み込み

must-revalidate
有効期限切れリソースのキャッシュを利用する前に必ず再検証を行う必要があります、また有効期限切れのリソースには使用しないでください。
proxy-revalidate
must-revalidate と同じですが、共有キャッシュ(プロキシーやCDNなど)にのみ適用されプライベートキャッシュには適用されません。
immutable
レスポンス内容が時間と共に変化しないことを示します。リソースが有効期限切れであってもサーバー上で変更される事はないので、ユーザーが明示的にページを更新した場合でも、クライアントは更新を確認するための条件付きの再検証(If-None-Match や If-Modified-Since)を送信してはいけません。 この拡張機能を認識していないクライアントは、HTTPの仕様に従って無視する必要があります。Firefoxでは、immutablehttps:// トランザクションの場合のみ有効です。 詳細に関してはこのブログも参照してください。

その他

no-store
クライアントの要求やサーバーの応答に関して、何もキャッシュするべきではありません。
no-transform
No transformations or conversions should be made to the resource. The Content-Encoding, Content-Range, Content-Type headers must not be modified by a proxy. A non- transparent proxy might, for example, convert between image formats in order to save cache space or to reduce the amount of traffic on a slow link. The no-transform directive disallows this.

キャッシュの防止

キャッシュをしないようにしたい場合は、以下の応答ヘッダーを送ることができます。加えて、 Expires 及び Pragma ヘッダーも参照してください。

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

静的な資産のキャッシュ

アプリケーション内で変更がないようなファイルについては、一般的に以下のようなレスポンスヘッダーを送信して積極的にキャッシュを追加できます。 これには例えば、アプリケーションによって提供される画像、CSS、JavaScriptなどの静的なファイルが含まれます。加えて、 Expires ヘッダーも参照してください。

Cache-Control: public, max-age=31536000

仕様書

仕様書 題名
RFC 7234 Hypertext Transfer Protocol (HTTP/1.1): Caching
RFC 5861 HTTP Cache-Control Extensions for Stale Content
RFC 8246 HTTP Immutable Responses

ブラウザーの対応

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応 あり あり あり あり あり あり
immutable なし1549 なし なし11
stale-while-revalidate なし1 なし なし2 なし なし なし
stale-if-error なし1 なし なし2 なし なし なし
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり あり あり あり あり あり
immutable なし なし なし なし なし11 なし
stale-while-revalidate なし なし なし なし なし なし なし
stale-if-error なし なし なし なし なし なし なし

1. See Chromium bug 348877.

2. See Bugzilla bug 995651.

関連情報

ドキュメントのタグと貢献者

このページの貢献者: kakerukaeru, mfuji09, Meganesaru, becyn
最終更新者: kakerukaeru,