2

サイズが3kbくらいの小さな画像がたくさんあり、CSSとjsファイルがたくさんあります。最初のリクエストがブラウザにキャッシュされた後、ページをリロードすると、ブラウザは(If-Modified-Sinceなどを設定して)キャッシュされたコンテンツの新鮮さをチェックしようとしており、レスポンス304は変更されません。この検証要求のそれぞれは、ページの読み込み時間を大幅に増加させます(たとえば、20回の300ms)。ブラウザでアセットを新鮮にして、キャッシュの新鮮度チェックリクエストをキャンセルします。

ブラウザからこのサーバーのキャッシュの最新性チェックをキャンセルするにはどうすればよいですか?再検証や、その期間のリロードごとにローカルキャッシュの最新性をリモートサーバーでチェックせずに、特定の時間(たとえば1時間)ローカルキャッシュファイル/イメージを使用するようブラウザに指示するにはどうすればよいですか?

レスポンスヘッダ

HTTP/1.1 304 Not Modified 
    Server: nginx/0.7.67 
    Date: Thu, 10 Nov 2011 17:53:33 GMT 
    Connection: keep-alive 
    Via: 1.1 varnish 
    X-Varnish: 1968827848 
    Last-Modified: Tue, 08 Nov 2011 07:36:04 GMT 
    Cache-Control: public, max-age=31536000 
    Etag: "5bda917d22f8a144c293f3f19723dbc6" 

リクエストヘッダ

GET /assets/icons/flash_close_button-5bda917d22f8a144c293f3f19723dbc6.png HTTP/1.1 
    Host: ???.heroku.com 
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:6.0.1) Gecko/20100101 Firefox/6.0.1 
    Accept: image/png,image/*;q=0.8,*/*;q=0.5 
    Accept-Language: en-us,en;q=0.5 
    Accept-Encoding: gzip, deflate 
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
    Connection: keep-alive 
    Referer: http://???.heroku.com/ 
    Cookie: ??? 
    If-Modified-Since: Tue, 08 Nov 2011 07:36:04 GMT 
    If-None-Match: "5bda917d22f8a144c293f3f19723dbc6" 
    Cache-Control: max-age=0 

答えて

2

この行:

Cache-Control: public, max-age=31536000 

サンプル小さな画像は[Herokuの上のレール3.1を使用]以下ヘッダの詳細をフェッチ

は、ブラウザに長期間更新を求めないように指示し、一般に公開されていないキャッシュにファイルを保存します。したがって、ブラウザは実際にこれらのファイルを再チェックしてはいけません。この動作が他の場所に存在することを確認するために別のブラウザを試しましたか?

あなたのファイルがワニスキャッシュではなく、あなたのdynoではなく、HTTP 304として返されていることを考えると、20ファイルの300msはと非常によく聞こえます()。しかし、これはユーザーにはほとんど気付かないはずです。

関連する問題