Я пытаюсь разработать новую политику кэширования для статических ресурсов на веб-сайте. Общей проблемой является всякий раз, когда обновляется javascript, CSS и т. Д. Многие пользователи используют устаревшие версии, поскольку в настоящее время нет кеширования определенных HTTP-заголовков, включенных в ответы файла.Проверка того, изменился ли ресурс HTTP после истечения максимального времени кеша
Это становится серьезной проблемой, когда, например, обновления javascript связаны с обновлениями на стороне сервера, а устаревшие javascript дросселируют новые ответы сервера.
Устранение кеширования браузера полностью с помощью cache-control: max-age=0, no-cache
кажется излишним, поскольку я все равно хотел бы снять давление с сервера, временно предоставив браузеру кеширование. Таким образом, настройка политики кэша максимум на один час кажется вполне подходящей, например cache-control: max-age=3600, no-cache
.
Я понимаю, что это всегда будет приносить новую копию ресурса, если кешированная копия старше одного часа. Я хотел бы узнать, можно ли установить HTTP-заголовок или комбинацию заголовков, которые будут указывать браузеру только для получения новой копии, если ресурс был последний проверенный более часа назад И , если ресурс изменился ,
Я просто стараюсь, чтобы браузеры слепо вытаскивали новые копии только потому, что кешированный ресурс старше одного часа, поэтому я также хотел бы добавить условие, что ресурс был изменен.
Просто, чтобы проиллюстрировать далее, что я спрашиваю:
- Новый пользователь приходит на сайт и получает свежий экземпляр script.js
- пользователь остается на месте в течение 45 минут, браузер использует кэшированную копию сценария .js всего времени
- Пользователь возвращается на сайт через 2 часа, и браузер запрашивает сервер, если script.js изменился
- Если это так, то он получает свежую копию, и процесс повторяется
- , если он не меняет ed, то он использует кешированную копию в течение следующего часа, после чего он снова проверит
Я что-то не понял? Я спрашиваю, как это работает, или мне нужно делать что-то другое?