4. Constructing Responses from Caches
リクエストが提示された場合、キャッシュは、次の条件を満たさない限り、保存されたレスポンスを再利用してはならない (MUST NOT):
- 提示された有効なリクエストURI(
[RFC7230]のセクション5.5)と保存されたレスポンスのURIが一致し、かつ - 保存されたレスポンスに関連付けられたリクエストメソッドが、提示されたリクエストに使用されることを許可しており、かつ
- 保存されたレスポンスによって指定された選択ヘッダーフィールド(ある場合)が、提示されたものと一致し(セクション4.1参照)、かつ
- 提示されたリクエストにno-cacheプラグマ(セクション5.4)もno-cacheキャッシュディレクティブ(セクション5.2.1)も含まれていない、または保存されたレスポンスが正常に検証されている(セクション4.3)、かつ
- 保存されたレスポンスにno-cacheキャッシュディレクティブ(セクション5.2.2.2)が含まれていない、または正常に検証されている(セクション4.3)、かつ
- 保存されたレスポンスが次のいずれかである:
- 新鮮である(セクション4.2参照)、または
- 古い状態で提供することが許可されている(セクション4.2.4参照)、または
- 正常に検証されている(セクション4.3参照)。
上記の要件のいずれも、キャッシュ制御拡張によって上書きできることに注意すること; セクション5.2.3を参照。
検証なしで保存されたレスポンスを使用してリクエストを満たす場合、キャッシュはAgeヘッダーフィールド(セクション5.1)を生成しなければならず (MUST)、レスポンスに存在する任意の値を保存されたレスポンスのcurrent_ageに等しい値で置き換える; セクション4.2.3を参照。
キャッシュは、安全でないメソッド([RFC7231] のセクション4.2.1)を持つリクエストをオリジンサーバーに書き込まなければならない (MUST); つまり、キャッシュは、リクエストを転送し、対応するレスポンスを受信する前に、そのようなリクエストへの返信を生成することは許可されていない。
また、安全でないリクエストは、すでに保存されているレスポンスを無効にする可能性があることに注意すること; セクション4.4を参照。
複数の適切なレスポンスが保存されている場合、キャッシュは最新のレスポンス(Dateヘッダーフィールドによって決定される)を使用しなければならない (MUST)。また、"Cache-Control: max-age=0"または"Cache-Control: no-cache"でリクエストを転送して、どのレスポンスを使用するかを明確にすることもできる。
時計が利用できないキャッシュは、毎回使用する際に再検証することなく、保存されたレスポンスを使用してはならない (MUST NOT)。