7

css/jsの縮小、圧縮などのためにChirpyを見ていましたが、キャッシュをサポートしていないことに気付きました。期限切れヘッダー、etags などを送信するためのロジックはありません。

この機能がないため、コンテンツのキャッシュがそれほど重要ではないかどうか疑問に思いました。Yスロー!これを採点するので、少し混乱しています。現在、キャッシュについて調査していますが、この css ファイルSuperFish.cssがキャッシュから取得される理由を説明できません。

  1. http://www.weirdlover.com (Chirpy の開発者) にアクセスしてください。

    初期ダウンロード

  2. 最初のネットワーク トラックを見てください。の有効期限ヘッダーがないことに注意してくださいSuperFish.css

    最初のプル

  3. ページに再度アクセスし、ネットワーク トレースを再度調べます。SuperFish.cssキャッシュから取得されるようになりました。

    キャッシュされた画像

SuperFish.cssページに再度アクセスしたときに がキャッシュから取得されるのはなぜですか? これは、クロムのすべてのインスタンスを閉じてからページに再度アクセスした場合でも発生します。

4

2 に答える 2

4

これは、HTTP 仕様に準拠しているようです。

13.4 レスポンスのキャッシュ可能性

キャッシュ制御 (セクション 14.9) ディレクティブによって特に制約されていない限り、キャッシュ システムは成功した応答 (セクション 13.8 を参照) を常にキャッシュ エントリとして格納してもよく、それが新鮮な場合は検証なしで返すことができます。

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

オリジンサーバーは常に明示的な有効期限を提供するとは限らないため、HTTP キャッシュは通常、ヒューリスティックな有効期限を割り当て、他のヘッダー値 (Last-Modified 時間など) を使用して妥当な有効期限を推定するアルゴリズムを採用します。

cache-control ヘッダーを提供せず、expires ヘッダーを省略すると、クライアントは自由にヒューリスティックを使用して有効期限を生成し、それに基づいて応答をキャッシュできます。

etag は期限切れのキャッシュ エントリを再検証するために使用されるため、etag の存在はこれには影響しません。まだ有効期限が切れています。

一般的な原則は、オリジンサーバーが鮮度に関係している場合、それを明示的に述べる必要があるということです。

于 2012-01-05T17:25:53.767 に答える
0

この場合 (サーバーが Expires ヘッダーを返さない場合)、ブラウザーは If-Modified-Since ヘッダーを使用して HTTP 要求を行う必要があり、サーバーが HTTP 304 Not modified を返す場合、ブラウザーはキャッシュからデータを取得します。しかし、最近では、データがキャッシュにある場合、ブラウザーは要求を実行しません。応答時間を短縮するために、このように動作すると思います。

于 2012-01-05T17:05:18.230 に答える