2015-09-03 4 views
1

Я пытаюсь разработать новую политику кэширования для статических ресурсов на веб-сайте. Общей проблемой является всякий раз, когда обновляется javascript, CSS и т. Д. Многие пользователи используют устаревшие версии, поскольку в настоящее время нет кеширования определенных HTTP-заголовков, включенных в ответы файла.Проверка того, изменился ли ресурс HTTP после истечения максимального времени кеша

Это становится серьезной проблемой, когда, например, обновления javascript связаны с обновлениями на стороне сервера, а устаревшие javascript дросселируют новые ответы сервера.

Устранение кеширования браузера полностью с помощью cache-control: max-age=0, no-cache кажется излишним, поскольку я все равно хотел бы снять давление с сервера, временно предоставив браузеру кеширование. Таким образом, настройка политики кэша максимум на один час кажется вполне подходящей, например cache-control: max-age=3600, no-cache.

Я понимаю, что это всегда будет приносить новую копию ресурса, если кешированная копия старше одного часа. Я хотел бы узнать, можно ли установить HTTP-заголовок или комбинацию заголовков, которые будут указывать браузеру только для получения новой копии, если ресурс был последний проверенный более часа назад И , если ресурс изменился ,

Я просто стараюсь, чтобы браузеры слепо вытаскивали новые копии только потому, что кешированный ресурс старше одного часа, поэтому я также хотел бы добавить условие, что ресурс был изменен.

Просто, чтобы проиллюстрировать далее, что я спрашиваю:

  1. Новый пользователь приходит на сайт и получает свежий экземпляр script.js
  2. пользователь остается на месте в течение 45 минут, браузер использует кэшированную копию сценария .js всего времени
  3. Пользователь возвращается на сайт через 2 часа, и браузер запрашивает сервер, если script.js изменился
  4. Если это так, то он получает свежую копию, и процесс повторяется
  5. , если он не меняет ed, то он использует кешированную копию в течение следующего часа, после чего он снова проверит

Я что-то не понял? Я спрашиваю, как это работает, или мне нужно делать что-то другое?

ответ

1

Кажется, что я неправильно понял, как это работает, потому что некоторые тесты в Chrome выявили именно то поведение, которое я искал в 5 шагах, о которых я говорил.

Он не слепо захватывает свежую копию с сервера, когда истекает максимальный возраст. Он выполняет GET, и если ответ 304 (не изменен), он продолжает использовать кешированную копию до истечения следующего часа, после чего он снова проверяет изменения и т. Д.

Опция no-cache неверна. В том числе это означает, что браузер будет всегда с сервером заносить изменения в файл каждый раз. Так что я действительно искал:

Cache-Control: public, max-age=3600