Cache-Controlヘッダの概要

HTTP/1.1通信において、「コンテンツをキャシュするかしないか」などのキャッシュに関わる制御をするために利用するHTTPヘッダ。
※ HTTP/1.0通信におけるキャッシュ制御は「Pragma」ヘッダで制御する。
 
キャッシュ」についての概要は下記のページを参照!
 
Cache-Controlヘッダが未指定の場合、キャッシュ対象となる(sharedキャッシュとして扱われる)。
多くのCDNでは「GET」または「HEAD」メソットの通信のみがキャッシュする通信の対象されているが、技術仕様「RFC7234」によると、「POST」メソッドの通信もキャッシュする通信の対象となっている。

利用例

レスポンスのCache-Controlヘッダに、キャッシュ禁止を示す値「no-store」が指定されている場合の通信例。
 
 

コンテンツをキャッシュさせたくない場合の設定

利用しているCDN(Content Delivery Network)によっては「no-store」,「no-cache」を見ないなど、全ての仕様が実装されているとは限らないため、下記の設定がベストとなる。
 

フィールド値の一覧

Cache-Controlヘッダに指定可能な値の一覧。
説明
private他のユーザには共有してはならないデータであることを示す。プライベートキャッシュに格納すべきコンテンツである事を示す。
public共有キャッシュに格納すべきコンテンツである事を示す。
no-storeコンテンツをキャッシュとして一切保存してはならない。
no-cacheキャッシュを保存して良いが、キャッシュを利用する際は既に保存したキャッシュが有効であることをオリジンサーバに毎回確認しなければならない。
no-transform中継者(Proxy等)はオブジェクトに対しての操作(形式変換など)をしてはならない事を示す。(画像の再圧縮等を防ぐ)
must-revalidateキャッシュが期限切れの場合、オリジンサーバでの確認無しにキャッシュを利用してはならない。サーバダウン時もキャッシュを使用してはならない。
proxy-revalidateprivateキャッシュには適用されないことを除き、値「must-revalidate」と同じ。
max-age=<秒数>キャッシュの有効期限(秒数)。サーバがレスポンス生成してから何秒後までキャッシュが有効か。
s-maxage共有キャッシュ(経路上のキャッシュ)にのみ有効なmax-age。
 

参考

キャッシュ制御に関連するヘッダフィールドは以下の通り。
 
Cache-Controlヘッダの詳細な資料は以下を参照!
Cache-Control - HTTP | MDN
レスポンスディレクティブの max-age=N は、レスポンスが生成されてから N 秒後まで、レスポンスが新鮮なままであることを示します。 Cache-Control: max-age=604800 キャッシュがこのリクエストを保存し、新鮮なうちに後続のリクエストに再利用できることを示します。 なお、 max-age はレスポンスを受信してからの経過時間ではなく、オリジンサーバーでレスポンスが生成されてからの経過時間であることに注意してください。したがって、他のキャッシュ(レスポンスが通ったネットワーク経路上)が 100 秒間保存した場合(レスポンスヘッダーフィールドの Age で示される)、ブラウザーキャッシュはその鮮度の有効期間から 100 秒を差し引きます。 Cache-Control: max-age=604800 Age: 100 Cache-Control: s-maxage=604800 レスポンスディレクティブの no-cache は、キャッシュに保存できることを示しますが、キャッシュがオリジンサーバーから切断された場合でも、再利用の前にオリジンサーバーで検証しなければなりません。 Cache-Control: no-cache キャッシュに、保存されているコンテンツを再利用する際に、必ず更新がないかどうかをチェックさせたい場合は、 no-cache を使用する必要があります。これは、キャッシュがオリジンサーバーに各リクエストを再検証することを要求することで実現されます。 no-cache はキャッシュにレスポンスを保存することを許可しますが、再利用する前に再検証することを要求します。もし、「キャッシュさせない」の意味が実際には「保存させない」であるなら、 no-store が使用すべきディレクティブです。 レスポンスディレクティブの must-revalidate は、レスポンスがキャッシュに保存され、新鮮なうちは再利用できることを示します。古くなったレスポンスは、再利用する前にオリジンサーバーで検証されなければなりません。 通常、 must-revalidate は max-age と共に使用されます。 Cache-Control: max-age=604800, must-revalidate HTTP では、キャッシュがオリジンサーバーから切り離されたときに、古いレスポンスを再利用できます。 must-revalidate はそれを防ぐための方法で、キャッシュは保存されたレスポンスを元のサーバーで再検証するか、それが検証不可能な場合は 504 (Gateway Timeout) のレスポンスを生成します。 レスポンスディレクティブの proxy-revalidate は must-revalidate と同等ですが、共有キャッシュにのみ適用されます。 レスポンスディレクティブの no-store は、あらゆる種類のキャッシュが(プライベートであろうと共有であろうと)このレスポンスを保存しないようにすることを指示します。 Cache-Control: no-store レスポンスディレクティブの private は、レスポンスがプライベートキャッシュ(ブラウザーのローカルキャッシュなど)にのみ保存できることを示します。 Cache-Control: private ユーザー個人を特定するコンテンツ、特にログイン後に受け取るレスポンスや、Cookie で管理されるセッションについては、 private ディレクティブを追加する必要があります。 パーソナライズされたコンテンツを持つレスポンスに private を付け忘れると、そのレスポンスが共有キャッシュに保存され、複数のユーザーによって再利用されてしまい、個人情報の漏えいに繋がる可能性があります。 ヘッダーフィールドに Authorization を持つリクエストに対するレスポンスは、共有キャッシュに保存してはいけません。しかし、 public ディレクティブはそのようなレスポンスを共有キャッシュに保存します。 Cache-Control: public 一般に、ページが Basic 認証または Digest 認証で制御されている場合、ブラウザーは Authorization ヘッダーを付けてリクエストを送信します。つまり、レスポンスは制限されたユーザー(アカウントを持つユーザー)のみにアクセス制御され、たとえ max-age がついていても基本的に共有キャッシュに保存可能ではありません。 その制限を解除するために public ディレクティブが使用できます。 Cache-Control: public ...