Как сказать браузерам повторную проверку кэшированного ресурса только один раз каждые X минут? - PullRequest
0 голосов
/ 25 апреля 2018

TL; DR: Как реализовать кэширование, подобное Cache-Control: public,must-revalidate, но как-то сказать браузеру повторную проверку только один раз каждые, скажем, 30 минут, вместо каждого отдельного запроса?

Длинная версия:

Я обслуживаю несколько файлов js и css и хочу, чтобы пользователи всегда обновляли локальный кэш, но с некоторой свободой.Браузеры должны иметь возможность кэшировать файл локально, но не нужно повторять проверку при каждом отдельном запросе.Например, после первого ответа 304 было бы нормально продолжать использовать уже локально кэшированный файл в течение еще 30 минут: браузеру не нужно было бы снова проверять свежесть после перехода пользователя на следующую страницу..

Я прочитал несколько статей о том, как реализовать кэширование, которое работает так, но безуспешно.

Я понимаю, что запрос 304 выполняется довольно быстро (я используюCDN между прочим), так как тело ответа пусто, но браузер все еще должен ждать несколько миллисекунд, и, если выполнено 4-5 таких запросов, браузеры уже начинают ставить в очередь эти revalidation запросы.

Ближайшее, что я получил, было: Cache-Control: max-age=1800,public,must-revalidate

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

Источники: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control https://support.cloudflare.com/hc/en-us/articles/115003206852-Origin-Cache-Control

1 Ответ

0 голосов
/ 08 мая 2018

Если повторная проверка прошла успешно, она будет кешироваться еще 30 минут.См. RFC 2616 10.3.5 :

Если кэш использует полученный ответ 304 для обновления записи в кэше, кэш ДОЛЖЕН обновить запись, чтобы отразить любое новое полезначения, указанные в ответе .

Поток выглядит так:

  • Он будет кэшироваться в течение 30 минут.
  • Макс.возраст истекает.
  • Он будет вынужден пройти повторную проверку.
  • Он обновит максимальный возраст новыми 30 минутами.

См. Также Макс. Возраст и обработка без изменений 304

...