3. Storing Responses in Caches
キャッシュは、次の条件を満たさない限り、いかなるリクエストへのレスポンスも保存してはならない (MUST NOT):
- リクエストメソッドがキャッシュによって理解され、キャッシュ可能として定義されており、かつ
- レスポンスステータスコードがキャッシュによって理解されており、かつ
- "no-store"キャッシュディレクティブ(セクション5.2参照)がリクエストまたはレスポンスヘッダーフィールドに現れておらず、かつ
- "private"レスポンスディレクティブ(セクション5.2.2.6参照)がレスポンスに現れていない(キャッシュが共有されている場合)、かつ
- Authorizationヘッダーフィールド(
[RFC7235]のセクション4.2参照)がリクエストに現れていない(キャッシュが共有されている場合)、ただしレスポンスが明示的に許可している場合を除く(セクション3.2参照)、かつ - レスポンスが次のいずれかを満たす:
- Expiresヘッダーフィールドを含む(セクション5.3参照)、または
- max-ageレスポンスディレクティブを含む(セクション5.2.2.8参照)、または
- s-maxageレスポンスディレクティブを含み、キャッシュが共有されている(セクション5.2.2.9参照)、または
- キャッシュを許可するCache Control拡張を含む(セクション5.2.3参照)、または
- デフォルトでキャッシュ可能として定義されているステータスコードを持つ(セクション4.2.2参照)、または
- publicレスポンスディレクティブを含む(セクション5.2.2.5参照)。
上記の要件のいずれも、キャッシュ制御拡張によって上書きできることに注意すること; セクション5.2.3を参照。
この文脈では、キャッシュがリクエストメソッドまたはレスポンスステータスコードを「理解した」とは、それを認識し、指定されたすべてのキャッシュ関連の動作を実装している場合を指す。
通常の操作では、一部のキャッシュは、キャッシュバリデータも明示的な有効期限も持たないレスポンスを保存しないことに注意すること。このようなレスポンスは通常、保存する価値がないためである。ただし、キャッシュがそのようなレスポンスを保存することは禁止されていない。