web-dev-qa-db-ja.com

期限切れのヘッダーは送信されず、コンテンツはキャッシュされます。ブラウザが条件付きGETリクエストを行うまでどのくらいかかりますか?

ブラウザのデフォルト設定を想定し、コンテンツは期限切れヘッダーなしで送信されます。

  1. ユーザーがウェブサイトにアクセスしたり、ブラウザが画像をキャッシュしたりします。
  2. ユーザーがブラウザを閉じたり、ページを更新したりしません。
  3. ユーザーは通常どおりサイトを閲覧し続けます。
  4. ブラウズが何らかの理由でキャッシュをダンプしないと仮定します。

ブラウザはユーザーがサーフィンするときに画像などをキャッシュしますが、コンテンツの鮮度について尋ねる条件付きGETリクエストをいつ発行するかは不明です(ページの更新は別として)。これがブラウザ固有の設定である場合、その値はどこで確認できますか(safari、IE、FireFox、Chromeなどのブラウザの場合)。

[編集:はい-常に期限切れヘッダーを送信する必要があることを理解しています。ただし、この調査は、有効期限のないヘッダーがないコンテンツでブラウザがどのように機能するかを理解することを目的としています。]

32

HTTP/1.1は、キャッシュメカニズムの選択を定義します。 expiresヘッダーは1つだけであり、cache-controlヘッダーもあります。

質問に直接答えるには、expiresヘッダーなしで返されたリソースの場合、返されたcache-controlディレクティブを考慮する必要があります。

HTTP/1.1は、キャッシュ関連のヘッダーなしで提供されるリソースのキャッシュ動作を定義していません。リソースがcache-controlまたはexpiresヘッダーなしで送信される場合、次に同じリソースが要求されたときに、クライアントが通常の(無条件の)要求を行うと想定する必要があります。

この動作から逸脱すると、クライアントは完全に準拠したHTTPクライアントではないと見なされます。その場合、問題は次のようになります。非準拠のHTTPクライアントからどのような動作が期待されるか。それに答える方法はありません。

HTTPキャッシングは複雑です。特定のシナリオで準拠クライアントが何をすべきかを完全に理解するには、 HTTPキャッシング仕様 を読んで理解してください。

10
Jon Cram

HTTPキャッシング仕様 (セクション13.4)から:cache-control(セクション14.9)ディレクティブによって特に制約されない限り、キャッシングシステムは常に成功した応答(セクション13.8を参照)をキャッシュエントリとして保存できます(MAY)。 、新しい場合は検証なしで返すことができ、検証が成功した後に返すことができます。これは、キャッシュ制御ヘッダーが送信されない場合、ユーザーエージェントが自由にやりたいことを実行できることを意味します。ほとんどのブラウザは、ユーザー設定とヒューリスティックの組み合わせを使用して、この状況でキャッシュするかどうか(およびキャッシュする期間)を決定します。

20
Peter Hart

期限切れヘッダーを送信しない限り、ほとんどのブラウザーは、後続の更新ごとにGET要求を行い、HTTP 200 OK(コンテンツを再度ダウンロードします)またはHTTP 304 Not Modified(およびキャッシュ内のデータを使用)のいずれかを取得します。

4
lukiffer