Cache-Control

This translation is incomplete. Please help translate this article from English

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
レスポンスが通常キャッシュ不可能なものであった (例えば、レスポンスに max-age ディレクティブや Expires ヘッダーが含まれていなかった) としても、レスポンスを任意のキャッシュがキャッシュして良いことを示します。
private
この場合のレスポンスは単一ユーザー向けであり、共有キャッシュに保存してはいけないことを示します。プライベートキャッシュにはレスポンスを保持することができます。
no-cache
キャッシュコピーをリリースする前に、検証のために元のサーバーへリクエストを送ることをキャッシュに強制します。
no-store
クライアントのリクエストであるかサーバーのレスポンスであるかにかかわらず、キャッシュを格納してはいけません。

有効期限

max-age=<seconds>
リソースが新しいとみなされる最長の時間を指定します。 Expires とは対照的に、このディレクティブはリクエスト時刻からの相対時間です。
s-maxage=<seconds>
max-age または Expires ヘッダーよりも優先しますが、共有キャッシュ (プロキシなど) でのみ適用され、プライベートキャッシュでは無視されます。
max-stale[=<seconds>]
クライアントが期限の切れたキャッシュを使用することを指定します。オプションとして、キャッシュを破棄してはならない時間を秒単位で指定できます。
min-fresh=<seconds>
少なくとも指定した秒数まではクライアントが最新のレスポンスを受け取ろうとすることを示します。
stale-while-revalidate=<seconds> 
非同期にコンテンツが更新されているか確認している間、クライアントが期限の切れたキャッシュを使用することを示します。指定する秒数には、期限切れキャッシュを何秒間使用するかを指定します。詳細は"Keeping things fresh with stale-while-revalidate"を参照して下さい。
stale-if-error=<seconds> 
コンテンツの更新チェックでエラーが発生した場合、クライアントが期限切れのキャッシュを使用することを示します。指定する秒数には、キャッシュの期限が切れてから何秒間クライアントが期限切れキャッシュを使用するか指定します。

再検証と再読み込み

must-revalidate
一度リソースが(例えば、max-ageで指定した期限が切れたなどで)古くなった場合、オリジンサーバーに確認してからでないと、引き続きキャッシュを使用してはいけないということを示します。
proxy-revalidate
must-revalidateと同じですが、(プロキシなどの)共有キャッシュにのみ適用され、プライベートキャッシュでは無視されます。
immutable
時間が経ってもレスポンスの本文が変化しないことを表します。これが指定されたリソースは期限が切れていなくてもサーバー側には変化がないため、クライアントは、たとえユーザーが明示的にページを更新した時でも、(If-None-MatchIf-Modified-Sinceなどの)条件付きの再検証を更新確認のために送るべきではありません。この拡張機能を実装してないクライアントはHTTP仕様に基づいて無視します。Firefoxでは、immutablehttps://通信の時のみ適用されます。詳しくはこのブログを参照してください。

その他

no-transform

リソースに対して変換を行うべきではないことを表します。Content-Encoding、Content-Range、Content-Type ヘッダーをプロキシによって変更してはいけません。例えば、不透明なプロキシや GoogleのWeb Light などのブラウザの機能は、キャッシュ空間を節約したり、低速なリンク上でのトラフィック量を減らしたりするために、画像フォーマットを変換することがあります。no-transform ディレクティブはこれを禁止します。

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.

キャッシュの防止

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

Cache-Control: no-store

静的な資産のキャッシュ

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 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 初回定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
Cache-ControlChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 ありIE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 ありOpera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 あり
immutable
実験的
Chrome 未対応 なし
補足
未対応 なし
補足
補足 See Chromium bug 611416.
Edge 完全対応 15Firefox 完全対応 49IE 未対応 なしOpera 未対応 なしSafari 完全対応 11WebView Android 未対応 なしChrome Android 未対応 なしFirefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 完全対応 11Samsung Internet Android 未対応 なし
stale-if-error
実験的非標準
Chrome 未対応 なし
補足
未対応 なし
補足
補足 See Chromium bug 348877.
Edge 未対応 なしFirefox 未対応 なし
補足
未対応 なし
補足
補足 See Bugzilla bug 995651 comment 7.
IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしFirefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なし
stale-while-revalidate
実験的非標準
Chrome 完全対応 75Edge 未対応 なしFirefox 完全対応 68IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 完全対応 75Chrome Android 完全対応 75Firefox Android 完全対応 68Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。
非標準。ブラウザー間の互換性が低い可能性があります。
非標準。ブラウザー間の互換性が低い可能性があります。
実装ノートを参照してください。
実装ノートを参照してください。

関連情報