この応答がキャッシュされるのはなぜですか?


32

現在、サイトのindex.htmlにこれらのヘッダーが返されているクライアントがあります。

Accept-Ranges:バイト
接続:キープアライブ
コンテンツエンコーディング:gzip
コンテンツの長さ:3658
コンテンツタイプ:text / html
日付:2013年10月10日(木)07:36:27 GMT
ETag: "4aa95e1-2ed2-4e721324728b7"
キープアライブ:タイムアウト= 5、最大= 100
最終更新日:2013年9月24日火曜日13:34:30 GMT
サーバー:Apache / 2.2.22
変化:Accept-Encoding、User-Agent

追加するExpiresCache-Control、必要に応じて追加することをお勧めしますが、混乱します:Chromeはこのリソースをキャッシュし、キャッシュから使用します(リクエストをまったく送信しない)、数時間後でも(たとえば、コピーを再利用します)昨日の午後8時30分にキャッシュしました)。これは、Chromeコンソールの[ネットワーク]タブで非常に明確に確認できます。[ネットワーク]タブでは、リクエストが表示200 (OK)され、[ ステータス ]列と(from cache)[ サイズ ] 列に灰色で表示されます。(Chromeのキャッシュのデフォルトは変更していません。)

私は、仕様がユーザーエージェントがヘッダーからの方向の不在で彼ら自身の決定をすることを可能にすることを理解します。ここで何が起きているのですか?Chromeはそれが数日前に最後に変更されたことを確認し、(たとえば)最新ではないバージョンを自由に使用できますか?それとも私が見逃しているものがありますか?

回答:


33

「Expires」および「Cache-Control」ヘッダーが指定されていないが、「Last-Modified」ヘッダー指定されている場合、ブラウザーはドキュメントをキャッシュに保持する期間を推測する必要があります。一部のブラウザ、ページを1日以上キャッシュに保持するアルゴリズムを使用します。

Googleキャッシュのベストプラクティスガイドの状態:

Last-Modifiedは、ブラウザがヒューリスティックを適用してキャッシュからアイテムを取得するかどうかを決定するという点で、「弱い」キャッシュヘッダーです。(ヒューリスティックはブラウザーによって異なります。)


Mozilla(Firefox)には、この状況に対するアルゴリズムの概要を示すHTTPキャッシングFAQがあります(ただし、ドキュメントの日付が2002年以降にアルゴリズムが変更された可能性があります)。

...「Last-Modified」ヘッダーを探します。このヘッダーが存在する場合、キャッシュのフレッシュネスライフタイムは、「Date」ヘッダーの値から「Last-modified」ヘッダーの値を10で除算した値に等しくなります。

したがって、変更後と現在の違いが15日間の場合、Firefoxはリソースを1.5日間キャッシュします。

すべての主要なブラウザは、Firefoxが実装しているのと同じ10%ルールを使用しているようです。StackOveflowでこれらのヒューリスティックを要求する質問があります。ブラウザーごとに異なる回答があるため、それらはすべて同様の実装を持っています。Internet ExplorerおよびWebkit(ChromeおよびSafari)に対する回答があります。


ブラウザのキャッシュのサイズは、キャッシングアルゴリズムが1日以上保持されると判断するファイルの制限要因になる可能性があります。通常、ブラウザにはキャッシュに使用するディスク容量の設定があります。多くのユーザーは、ブラウザーを閉じるときにキャッシュもクリアします。そのため、このようなファイルがキャッシュされる時間は、通常次の要素に依存します。

  • ブラウザが割り当てたキャッシュスペースの量
  • ユーザーがアクセスするWebサイトの数(およびそれらのサイトのサイズ)
  • ユーザーがブラウザを閉じたかどうか

「Firefoxは1.5日間リソースをキャッシュします」を明確にしてください。どの日付から1.5日までキャッシュされますか?すでに15日であれば、すでに期限切れになっているでしょう。そして、NOWから最後に変更されたものは永久に増加するため、永久にキャッシュされます!
myDoggyWritesCode

1
永遠ではありません。最後に変更されたヘッダーとダウンロードの時間の1/10の時間。15日間経過している場合、ファイルが最後に変更されてから150日間経過している可能性があります。
スティーブンオステルミラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.