1

ある種のカスタムWebサーバーを実装しています。そして、Expiresヘッダーのサポートを追加することを検討しています。ただし、どのように正確に実装するかは少しわかりません。

サーバー上の同じ変更されていないリソースに対して複数のコールドキャッシュリクエストが行われ、サーバーが異なるExpiresヘッダーを返した場合(たとえば、相対時間を使用してExpires日付の正確な値を計算する場合(リクエスト時刻から+6時間など))、その間のすべてのプロキシサーバーのキャッシュも無効にしますか?または、(仕様に従って)発生することは不可能ですか?

HTTPヘッダーは、Expires複数のコールドキャッシュリクエスト間で一貫している必要がありますか?

4

1 に答える 1

0

OK、気にしないでください。HTTP仕様の[キャッシュの再検証と再読み込みの制御]セクションで関連情報を見つけました。

基本的に、必要なすべての異なるバリデーターを提供できますが、そのような場合、プロキシは、独自のキャッシュおよびプロキシと通信するさまざまなユーザーエージェントからの異なるバリデーターのセットを持っている可能性があることに注意する必要があります。彼らはあなたにそれを送ることを選ぶかもしれません、そしてそれはエンドユーザーにとって正しいか最も最適なものではないかもしれません。ただし、仕様では「最善のアプローチ」が提案されています。

Expiresこれは、ヘッダーだけでなく、ETag、Cache-Controlなどもカバーする必要があると思います。


誰かが興味を持っている場合に備えて、関連する抜粋を次に示します。

max-age = 0ディレクティブを使用して、中間キャッシュが自身のキャッシュエントリを再検証するように強制され、クライアントが要求で独自のバリデーターを提供した場合、提供されたバリデーターは、現在キャッシュに保存されているバリデーターとは異なる場合があります。エントリ。この場合、キャッシュは、セマンティックの透過性に影響を与えることなく、独自の要求を行う際にいずれかのバリデーターを使用できます(MAY)。ただし、バリデーターの選択はパフォーマンスに影響を与える可能性があります。最善のアプローチは、中間キャッシュが要求を行うときに独自のバリデーターを使用することです。サーバーが304(変更なし)で応答した場合、キャッシュは検証済みのコピーを200(OK)応答でクライアントに返すことができます。ただし、サーバーが新しいエンティティとキャッシュバリデーターで応答する場合。中間キャッシュは、強力な比較関数を使用して、返されたバリデーターをクライアントの要求で提供されたバリデーターと比較できます。クライアントのバリデーターがオリジンサーバーのバリデーターと等しい場合、中間キャッシュは単に304(変更なし)を返します。それ以外の場合は、200(OK)応答で新しいエンティティを返します。リクエストにno-cacheディレクティブが含まれている場合、min-fresh、max-stale、またはmax-ageを含めるべきではありません(SHOULDNOT)。

于 2010-03-16T23:18:20.997 に答える