2011-06-08 16 views
7

http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.htmlを読んでいるうちに、キャッシングアルゴリズムが思ったよりも複雑であることがわかりました。ローカルクロックがサーバークロックと一致しない場合のブラウザキャッシュの動作

RFC2616によれば、応答が新鮮であればHTTPリクエストが送信されます。そして

response_is_fresh = (freshness_lifetime > current_age) 

てcurrent_ageはまたはは両方のローカルクロックとは何の関係もないヘッダを、有効期限最大エージングに由来することができます。ただし、freshness_lifetimeの計算はローカルクロックによって異なります。

ブラウザのローカル時計がサーバー側の時計と一致しない場合。 HTTPキャッシングが不要なリクエストを免除することはできないのでしょうか?

おかげ

+0

良い質問です。 – Orbling

+0

今、私はブラウズがcurrent_ageを今のように計算していると思います - "時間応答が受信されました"。それは簡単で簡単です。とにかく、アプリケーションはその動作をキャッシュに依存すべきではありません。 –

答えて

2

彼らのクロックが同期している必要はありませんが、クライアントはキャッシュされたリソースの年齢を決定し、max-ageに対してということと一致することができるように努めてクロックを必要とします。 max-ageが応答に存在しない場合、クライアントは互いにDateExpiresヘッダを比較することによって、それを計算することができます。

しかし、クライアントが極端なクロックスキューに苦しむ場合、キャッシュが故障し、その年代を確実に判断できないため、リソースが誤ってキャッシュされる可能性があります。

関連する問題