Cache-Control
当ページでは、HTTP通信で利用される「Cache-Control」ヘッダについて、図解も用いながら詳細に解説しています。
Cache-Controlヘッダの概要
「Cache-Conrtol」ヘッダは、HTTP/1.1通信において、「コンテンツをキャシュするかしないか」などのキャッシュに関わる制御をするために利用するHTTPヘッダです。
Cache-Controlヘッダが未指定の場合、その通信はキャッシュする対象となります(sharedキャッシュとして扱われる)。
多くのCDNでは「GET」または「HEAD」メソッドの通信のみがキャッシュする通信の対象されていますが、技術仕様「RFC7234」によると、「POST」メソッドの通信もキャッシュする通信の対象となっています。
Cache-Conrtolヘッダの利用例
例えば、「レスポンスに含まれる情報をキャッシュさせたくない!」という場合、HTTP通信のレスポンスヘッダに以下の記述を追加します。
上記のように「Cache-Control」ヘッダに、キャッシュの禁止を示す値「no-store」が指定されている場合の通信は以下の図ような挙動となります。
CDNなどのキャッシュを保持するシステムでコンテンツをキャッシュするかどうかを決める際、通信内の「Cache-Control」ヘッダの情報が参照されて制御に利用されます。
フィールド値の一覧
Cache-Controlヘッダに指定可能なフィールド値の一覧を紹介します。
フィールド値 | 説明 |
---|---|
private | 他のユーザには共有してはならないデータであることを示す。プライベートキャッシュに格納すべきコンテンツである事を示す。 |
public | 共有キャッシュに格納すべきコンテンツである事を示す。 |
no-store | コンテンツをキャッシュとして一切保存してはならない。 |
no-cache | キャッシュを保存して良いが、キャッシュを利用する際は既に保存したキャッシュが有効であることをオリジンサーバに毎回確認しなければならない。 |
no-transform | 中継者(Proxy等)はオブジェクトに対しての操作(形式変換など)をしてはならない事を示す。(画像の再圧縮等を防ぐ) |
must-revalidate | キャッシュが期限切れの場合、オリジンサーバでの確認無しにキャッシュを利用してはならない。サーバダウン時もキャッシュを使用してはならない。 |
proxy-revalidate | privateキャッシュには適用されないことを除き、値「must-revalidate」と同じ。 |
max-age=<秒数> | キャッシュの有効期限(秒数)。サーバがレスポンス生成してから何秒後までキャッシュが有効か。 |
s-maxage | 共有キャッシュ(経路上のキャッシュ)にのみ有効なmax-age。 |
複数のフィールド値が指定されている場合の挙動
複数のフィールド値が指定されていて制御内容が衝突する場合、1番制限の厳しい制御内容が採用されます。
つまり、以下のような指定がされている場合、この中で1番制限が厳しい「no-store」が採用される事となります。
コンテンツをキャッシュさせたくない場合の設定
「no-store」を指定する事でキャッシュを禁止できますが、利用しているCDN(Content Delivery Network)によっては「no-store」,「no-cache」を見ないなど、全ての仕様が実装されているとは限らないため、下記の設定がベストとなります。
参考
キャッシュ制御に関連するヘッダフィールドは以下の通り。
Cache-Controlヘッダの詳細な資料は以下を参照!