[2] キャッシュに蓄積されるデータの単位をキャッシュ項目といいます。
[3] キャッシュ項目は、キャッシュキーと、 1つ以上の HTTP応答との組です >>1。この応答のことを蓄積された応答といいます。
[6] キャッシュ項目には、完全なものと不完全なものがあります。
[172] Meter を実装する串の場合、
蓄積された応答について計測数に関するいくつかの値を保持する必要があります。
Meter 参照。[4] キャッシュキーは要求メソッドと対象URLです。
しかし一般的なHTTPキャッシュは GET に対する応答しかキャッシュしないので、
その場合は対象URLだけをキャッシュキーとすることができます。 >>1
[5] 対象資源で内容折衝が使われている場合には、 複数のHTTP応答が蓄積されることになります。 >>1
[176] 蓄積された応答を利用できるかどうかの判定には、蓄積された応答のもととなった要求の情報の一部が必要になります。
[184] /.well-known/http-opportunistic を使う場合、
代替サービスの認証済み接続で得たものか否かのフラグを保持する必要があります。
[8] キャッシュ可能性、検証、条件付き要求、部分要求も参照。
[10] キャッシュからの応答の決定は、次のように行います。
Age:
ヘッダーとして追加 (既にあれば置換) します (齢参照)。Cache-Control: max-age が指定されていれば、
その秒数より齢が大きい場合 >>54。Cache-Control: min-fresh が指定されていれば、
その秒数と齢の和の方が新鮮寿命より大きい場合 >>53。Cache-Control: no-cache がある場合 >>71。Cache-Control: ヘッダーがなく、
Pragma: no-cache がある場合 >>71, >>39。Cache-Control: no-cache がある場合で、
ヘッダー名が指定されていない場合 >>73。Cache-Control: must-revalidate
がある場合 >>101。Pragma: no-cache
がある場合 (no-cache 参照)。Cache-Control: proxy-revalidate がある場合 >>104, >>101。Meter 参照)Cache-Control: only-if-cached
があれば、使う応答を「エラー応答」とします >>93, >>38。: の間に空白があれば、除去します
>>139。obs-fold があれば置換します >>139。Transfer-Encoding:, Content-Length:,
Connection:, Via:, X-Forwarded-*:, Forwarded:, Host:,
Proxy-Authorization:, TE:, Max-Forwards:, Meter:, RFC 2774
各ヘッダーや要求対象のホスト部分に関する書き換えを適宜行います (それぞれの項を参照)。ETag: が含まれていれば、
If-None-Match: か If-Match:
にその実体タグを指定します >>127。If-None-Match:
が指定されているなら、要求が求めている範囲が応答に含まれている場合のみ、
応答の実体タグを If-None-Match:
に付け加えて構いません >>106。Last-Modified: が含まれていれば、If-Unmodified-Since:
に Last-Modified: の値を設定します >>106。If-Modified-Since:
に Last-Modified: の値を設定します >>106。Cache-Control: stale-while-revalidate
があってその秒数と新鮮寿命の和より齢が大きくないなら、
上流からの応答がなかったものとして先に進むと共に、
並列に上流からの最終的な応答を待ち、受信した時の処理(のみ)を行います >>166。Cache-Control: must-revalidate がある場合 >>101。Cache-Control: proxy-revalidate がある場合 >>104, >>101。Cache-Control: s-maxage
がある場合 >>95。Cache-Control: no-cache がある場合 >>23。Cache-Control: ヘッダーがなく、
Pragma: no-cache がある場合 >>23, >>39。Cache-Control: no-cache
がある場合 >>73, >>23。Pragma: no-cache
がある場合 (no-cache 参照)。Cache-Control: no-store がある場合 >>23。Meter 参照)Cache-Control: max-stale
が指定されている場合、Cache-Control: only-if-cached
があれば、使う応答を「エラー応答」とします >>93, >>38。: の間に空白があれば、除去します
>>139。obs-fold があれば置換します >>139。Transfer-Encoding:, Content-Length:,
Connection:, Via:, Host:,
Proxy-Authorization:, TE:, Max-Forwards:, X-Forwarded-*:, Forwarded:, Meter:, RFC 2774
各ヘッダーや要求対象のホスト部分に関する書き換えを適宜行います (それぞれの項を参照)。Cache-Control: max-age=0
または Cache-Control: no-cache を追加します >>23。1xx 応答を受信したら、それぞれについて、Date: がないなら、
Date: ヘッダーを追加します >>131。: の間に空白があれば、除去します
>>139。obs-fold があれば置換します >>139。Transfer-Encoding:, Content-Length:,
Connection:, Via:, Meter:, RFC 2774
各ヘッダーに関する書き換えを適宜行います (それぞれの項を参照)。: の間に空白があれば、除去します
>>139。obs-fold があれば置換します >>139。Transfer-Encoding:, Content-Length:,
Connection:, Via:, Meter:, RFC 2774
各ヘッダーに関する書き換えを適宜行います (それぞれの項を参照)。Cache-Control: no-cache があって、
ヘッダー名が指定されている場合、Cache-Control: no-transform
が含まれない場合で、変形を適用したい場合、[179] キャッシュ項目を削除するタイミングについて、仕様上は規定はありません。 腐敗したキャッシュ項目はただちに応答として再利用することはできなくなりますが、 再検証すれば再利用できますから、必ずしも削除しなくても構いません。
[180] キャッシュは、ストレージ容量その他の都合で任意のタイミングでキャッシュ項目を削除できます。
[183] キャッシュは、同じ対象資源や Vary:
の新しい応答を蓄積するときに、前のキャッシュ項目を削除したり、置き換えたりできます。
[182] 応答の Cache-Control: retain キャッシュ指令でのデルタ秒の指定は、
指定された秒数が経過した後キャッシュ項目を削除できます。
[181] キャッシュ項目全体、またはキャッシュ項目に関連付けられた計測数を削除する場合には、 計測数を報告しなければならないことがあります。
Meter 参照。