ブラウザは、キャッシュ可能と明示的に設定されていないリソースをキャッシュするためにどのようなヒューリスティックを使用するのでしょうか? 質問する

ブラウザは、キャッシュ可能と明示的に設定されていないリソースをキャッシュするためにどのようなヒューリスティックを使用するのでしょうか? 質問する

13.2.2 ヒューリスティック有効期限

オリジン サーバーは必ずしも明示的な有効期限を提供するとは限らないため、HTTP キャッシュは通常、他のヘッダー値 (Last-Modified 時間など) を使用して妥当な有効期限を推定するアルゴリズムを採用し、ヒューリスティックな有効期限を割り当てます。HTTP/1.1 仕様では特定のアルゴリズムは提供されていませんが、その結果に最悪のケースの制約が課されています。ヒューリスティックな有効期限はセマンティックの透明性を損なう可能性があるため、慎重に使用する必要があります。また、オリジン サーバーには可能な限り明示的な有効期限を提供することを推奨します。HTTP/1.1 RFC 2616

妥当な有効期限を推定するためにブラウザが使用するアルゴリズムは何ですか?

理想的な回答は、ソースコードまたは公式ブログ投稿からの証拠とともに、すべての主要ブラウザを網羅することになります。

ベストアンサー1

対象となるすべてのブラウザが Internet Explorer 8 以降であると仮定します (たとえば、IE5 ではキャッシュ ヘッダーの動作が悪くなります)。

キャッシュを制御する標準ベースの方法は1つしかありません(HTTP/1.1で導入されました)。Cache-ControlHTTP ヘッダー

少なくとも 1996 年以来、IE は HTTPS コンテンツのキャッシュにオプトアウト ポリシーを使用しています。

Chrome は導入以来、HTTPS をオプトアウトしているようです (つまり、キャッシュしないように指示されない限り、キャッシュします)。2011 年に Firefox 4 (Safari は除く) は、HTTPS コンテンツのオプトアウト キャッシュに切り替わりました。ソース

推奨事項

  1. ブラウザのキャッシュを制御するにはHTTPヘッダーのみを使用するこれに反対する場合は、IE が HTML 内に設定された 2 つのキャッシュ制御ディレクティブのみを認識することに注意してください。

    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    

    そして、HTTPSのシナリオでは前者だけが有用であるように思われる。さらに、PragmaIEで使用しようとすると問題が発生する。 ついに、Chrome はメタタグ内のキャッシュディレクティブを無視しますそれらの有用性はさらに低下します。

  2. Expiresヘッダーは使用しないでください最近のブラウザでははExpiresに置き換えられCache-ControlExpires: 0Pragma: no-cache技術的に無効な応答ヘッダー。はい、これらは最初から存在していましたが、すべての最新のブラウザ (Chrome など) が使用しているわけではなく、 に置き換えられましたCache-Control

  3. Varyヘッダーは地雷原ですVary古いIEでの動作VaryXHRでの動作詳細を調べるのは読者の課題として残されており、異なるコンテンツには異なる URL を使用することが望ましいという印象を受けます...

  4. ブラウザが条件付きリクエストを行えるようにするには、ETagsEtagsを使用すると、ブラウザはコンテンツが変更されたかどうかを確認するための軽量チェックを実行できます。そして、完全なリクエストを行わない場合は、完全なリクエストを行わないようにすることができます。

  5. 一部のブラウザは壊れていてハッキングが必要なので注意してくださいIE 8では、キャッシュしないように指示されたファイルをダウンロードする際に問題が発生する場合があります。

ブラウザのキャッシュアルゴリズム

参照

おすすめ記事