私は現在、クライアントがオリジンサーバーの HTTP 1.1 リクエストを行うシステムに取り組んでいます。私はクライアント ソフトウェアとサーバー ソフトウェアの両方を制御しているので、HTTP ヘッダー セットを自由に制御できます。クライアントの間には、Web プロキシ/キャッシュ デバイス (Squid などと考えてください) の複数の階層レイヤーがあります。
通常、オリジンによって提供されるデータは高度にキャッシュ可能であり、これを示すために HTTP 応答ヘッダーを設定する予定です。具体的には を使用する予定Cache-Control: public, max-age=<value>
です。max-age
これは、中間プロキシが指定されたまでの応答をキャッシュすることを意味することを理解していLast-Modified
ます304
。
私が抱えている問題は、キャッシュに保持されているデータが無効になっている可能性があることにクライアントが気付く可能性があることです。この場合、クライアントは、オリジンで応答を取得または再検証するようにキャッシュに指示する要求を作成する必要があります。元のレスポンスが異なる場合、キャッシュはこの新しいレスポンスを保存する必要があります。私の考えでは、これにはクライアントがリクエストを行う必要があり、チェーン内の各キャッシュは、オリジンまでさかのぼって、次の上流のデバイスでそのレスポンスを再検証する必要があります。新しい応答は、実際にそれを持っている最も近いキャッシュから提供できます。
これを実現するためにクライアント要求に設定する必要がある正しい HTTP ヘッダーは何ですか? Cache-control: no-cache
最初は、HTTPリクエストで設定するとこれが起こると思っていましたが、RFC を読むと、中間キャッシュにオリジンに戻る (望ましい) だけでなく、新しい応答をキャッシュしない (望ましくない) ように指示するようです。 . その後、の HTTP リクエスト ヘッダーがおそらくこれを行うという記事を見ましたCache-control: max-age=0
が、よくわかりません。
max-age=0
ここで必要なことを行いますか、それとも HTTP ヘッダーの他の組み合わせが必要ですか?