メインコンテンツまでスキップ

5 2 2.Response Cache Control Directives

このセクションでは、オリジンサーバーまたは中間層がHTTPレスポンスで使用できるキャッシュディレクティブを定義する。

5.2.2.1. must-revalidate

"must-revalidate"レスポンスディレクティブは、レスポンスが古くなった後、キャッシュがオリジンサーバーでの正常な検証なしにそのレスポンスを使用して後続のリクエストを満たしてはならない (MUST NOT) ことを示す。

must-revalidateディレクティブは、特定のプロトコル機能の信頼できる動作をサポートするために必要である。すべての状況において、キャッシュはmust-revalidateディレクティブに従わなければならない (MUST); 特に、キャッシュが何らかの理由でオリジンサーバーに到達できない場合、504(Gateway Timeout)レスポンスを生成しなければならない (MUST)。

must-revalidateディレクティブは、リクエストの検証に失敗すると、黙って実行されない金融取引など、誤った操作につながる可能性がある場合に限り、サーバーによって使用されるべきである (ought to)。

5.2.2.2. no-cache

引数: #field-name (オプション)

"no-cache"レスポンスディレクティブは、オリジンサーバーでの正常な検証なしに、そのレスポンスを後続のリクエストを満たすために使用してはならない (MUST NOT) ことを示す。これにより、オリジンサーバーは、古いレスポンスを送信するように構成されているキャッシュであっても、それに接触せずにレスポンスを使用してリクエストを満たすことを防ぐことができる。

no-cacheレスポンスディレクティブが1つ以上のフィールド名を指定する場合、キャッシュはキャッシングに関する他の制限に従って、後続のリクエストを満たすためにレスポンスを使用してもよい (MAY)。ただし、オリジンサーバーで正常に再検証されない限り、指定されたフィールド名を後続のリクエストへのレスポンスで送信してはならない (MUST NOT)。これにより、オリジンサーバーは、レスポンスの残りの部分のキャッシングを許可しながら、レスポンス内の特定のヘッダーフィールドの再使用を防ぐことができる。

注: ほとんどのHTTP/1.0キャッシュは、このディレクティブを認識または遵守しない。また、フィールド名を持つno-cacheレスポンスディレクティブは、多くの場合、無条件のno-cacheディレクティブを受信したかのように実装によって処理される; つまり、条件付き形式の特別な処理は広く実装されていない。

5.2.2.3. no-store

"no-store"レスポンスディレクティブは、キャッシュが直接のリクエストまたはレスポンスのいずれの部分も保存してはならない (MUST NOT) ことを示す。このディレクティブはプライベートキャッシュと共有キャッシュの両方に適用される。このコンテキストでの「保存してはならない」とは、キャッシュが意図的に不揮発性ストレージに情報を保存してはならず (MUST NOT)、転送後できるだけ速やかに揮発性ストレージから情報を削除するために最善の努力をしなければならない (MUST) ことを意味する。

このディレクティブは、プライバシーを確保するための信頼できるまたは十分なメカニズムではない。特に、悪意のあるまたは侵害されたキャッシュはこのディレクティブを認識または遵守しない可能性があり、通信ネットワークは盗聴に対して脆弱である可能性がある。

5.2.2.4. no-transform

"no-transform"レスポンスディレクティブは、中間層(キャッシュを実装しているかどうかに関係なく)が、[RFC7230] のセクション5.7.2で定義されているように、ペイロードを変換してはならない (MUST NOT) ことを示す。

5.2.2.5. public

"public"レスポンスディレクティブは、通常はキャッシュ不可能であるか、プライベートキャッシュ内でのみキャッシュ可能なレスポンスであっても、任意のキャッシュがレスポンスを保存してもよい (MAY) ことを示す。(キャッシュ可能性に対するAuthorizationヘッダーフィールドの影響について議論しているセクション3.2も参照。)

5.2.2.6. private

引数: #field-name (オプション)

"private"レスポンスディレクティブは、レスポンスが単一のユーザー向けであり、共有キャッシュによって保存されてはならない (MUST NOT) ことを示す。プライベートキャッシュは、通常はキャッシュ不可能なレスポンスであっても、レスポンスを保存し、後のリクエストのためにそれを再利用してもよい (MAY)。

privateレスポンスディレクティブが1つ以上のフィールド名を指定する場合、この要件はリストされたレスポンスヘッダーフィールドに関連付けられたフィールド値に限定される。つまり、共有キャッシュは指定されたフィールド名を保存してはならず (MUST NOT)、レスポンスメッセージの残りの部分を保存してもよい (MAY)。

注: このディレクティブは、プライバシーを確保するための信頼できるまたは十分なメカニズムではない。特に、悪意のあるまたは侵害されたキャッシュはこのディレクティブを認識または遵守しない可能性があり、通信ネットワークは盗聴に対して脆弱である可能性がある。

5.2.2.7. proxy-revalidate

"proxy-revalidate"レスポンスディレクティブは、プライベートキャッシュには適用されないことを除いて、must-revalidateレスポンスディレクティブと同じ意味を持つ。

5.2.2.8. max-age

引数: delta-seconds

"max-age"レスポンスディレクティブは、レスポンスの経過時間が指定された秒数より大きい場合、それを古いものと見なすべきであることを示す。

このディレクティブは引数構文のトークン形式を使用する: 例えば、'max-age=5'であり'max-age="5"'ではない。送信者は引用符で囲まれた文字列形式を生成すべきではない (SHOULD NOT)。

5.2.2.9. s-maxage

引数: delta-seconds

"s-maxage"レスポンスディレクティブは、共有キャッシュにおいて、このディレクティブで指定された最大経過時間がmax-ageディレクティブまたはExpiresヘッダーフィールドで指定された最大経過時間を上書きすることを示す。s-maxageディレクティブは、proxy-revalidateレスポンスディレクティブのセマンティクスも暗示する。

このディレクティブは引数構文のトークン形式を使用する: 例えば、's-maxage=10'であり's-maxage="10"'ではない。送信者は引用符で囲まれた文字列形式を生成すべきではない (SHOULD NOT)。