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

Cache-Control 一般ヘッダフィールドはリクエストとレスポンス両方のキャッシュルールを指定するために用います。キャッシュの指定は一方的で、つまり、リクエストの定義がレスポンスの定義と同じにはなりません。

ヘッダータイプ General header
Forbidden header name no
CORS-safelisted response-header yes

構文

ディレクティブは大文字小文字の区別なしで、引数を持つことがあり、トークン又は引用符で囲んだ文字列の構文を使用することができます。複数のディレクティブはコンマで区切ります。

キャッシュのリクエストディレクティブ

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
Forces caches to submit the request to the origin server for validation before releasing a cached copy.
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>
Specifies the maximum amount of time a resource will be considered fresh. Contrary to Expires, this directive is relative to the time of the request.
s-maxage=<seconds>
Overrides max-age or the Expires header, but it only applies to shared caches (e.g., proxies) and is ignored by a private cache.
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
The cache must verify the status of the stale resources before using it and expired ones should not be used.
proxy-revalidate
Same as must-revalidate, but it only applies to shared caches (e.g., proxies) and is ignored by a private cache.
immutable
Indicates that the response body will not change over time. The resource, if unexpired, is unchanged on the server and therefore the client should not send a conditional revalidation for it (e.g. If-None-Match or If-Modified-Since) to check for updates, even when the user explicitly refreshes the page. Clients that aren't aware of this extension must ignore them as per the HTTP specification. In Firefox, immutable is only honored on https:// transactions. For more information, see also this blog post.

その他

no-store
The cache should not store anything about the client request or server response.
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.

キャッシュの防止

To turn off caching, you can send the following response header. In addition, see also the Expires and Pragma headers.

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

静的な資産のキャッシュ

For the files in the application that will not change, you can usually add aggressive caching by sending the response header below. This includes static files that are served by the application such as images, CSS files and JavaScript files, for example. In addition, see also the Expires header.

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.

関連情報

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

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