Сохраняйте ресурсы свежими в браузере и отменяйте запрос проверки свежести кеша [для rails 3.1 app на heroku] - PullRequest
2 голосов
/ 10 ноября 2011

У меня много маленьких изображений (размером ~ 3kb или около того) и много файлов css и js.После первого запроса они кэшируются в браузере, но когда я перезагружаю страницу, браузер пытается проверить свежесть кэшированного содержимого (путем установки If-Modified-Since и т. Д.) И получает ответ 304 без изменений.Каждый из этих запросов на проверку серьезно увеличивает время загрузки страницы (скажем, 20 раз на 300 мс).

Как отменить проверку свежести кэша на сервере из браузера?Как можно указать браузеру использовать локальные кэшированные файлы / изображения в течение определенного времени (например, 1 час) без повторной проверки или проверки свежести локального кэша на удаленном сервере для каждой перезагрузки с этим периодом времени?

ниже приведен пример деталей заголовка небольшого изображения [с использованием rails 3.1, на heroku]:

Заголовки ответа

    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

1 Ответ

2 голосов
/ 23 декабря 2011

Эта строка:

Cache-Control: public, max-age=31536000

сообщает браузеру, что он не должен запрашивать обновления в течение длительного времени, и хранит файлы в общедоступном кэше (который означает, что это значит, что общедоступен для локальной машины, а неширокая публика).Поэтому ваш браузер не должен повторно проверять эти файлы.Вы пробовали другой браузер, чтобы убедиться, что такое поведение существует в другом месте?

Говоря все это, хотя, учитывая, что ваши файлы поступают из кэша лака, а не из dyno, и возвращаются как HTTP 304, 300 мс в течение 20файлы звучат как очень долгое время.Однако это должно быть едва заметно для пользователя.

...