すでに保存されたレスポンスを使うべきリクエストのために、HTTP は Cache-Control: only-if-cached を定義しています。

クライアントは HTTP キャッシュプロキシ経由で送信できます:

curl --proxy http://127.0.0.1:3128 \
  --header 'Cache-Control: only-if-cached' \
  --include http://www.example.org/report

このディレクティブに従うキャッシュは、リクエストの他の制約と整合する保存済みレスポンスを返すべきであり、要求を満たせない場合は 504 Gateway Timeout を返すべきです。ここでの 504 は、プロキシへの TCP 接続失敗ではなくキャッシュポリシーを表すことがあります。

このディレクティブは古いコンテンツを自動的に許可するものではありません。鮮度、検証要件、そして一致する Vary フィールドは依然として重要です。no-cache リクエストディレクティブは、代わりに再利用前のオリジンでの検証成功を要求できます。

これはキャッシュのオフライン検証モードを設定することとも異なります。only-if-cached は個々のリクエストに載り、クライアントが何を受け取る用意があるかを表します。

この動作をサポートするキャッシュを使ってください。無視されたリクエストディレクティブはファイアウォールではないため、上流トラフィックを厳密に防ぐには独立して適用されるネットワークまたはサーバーのポリシーが必要です。

通常の HTTPS CONNECT プロキシは暗号化された HTTP ヘッダーを見ることも、そのトンネルからページオブジェクトを保持することもありません。この例では、キャッシュが処理できる平文 HTTP リソースを意図的に使っています。

関連記事