Я немного смущен тем, что лучше всего использовать Varnish: я видел много сайтов, где я знаю, что они использовали Varnish, на которых Cache-Control: no-store, no-cache, must-revalidate
Заголовки HTTP активированы. Содержание их веб-сайтов не меняется уже давно - так почему же они не используют кеширование в браузере? Может быть, они хотят лучше контролировать контент, если им нужно быстро что-то изменить, что в противном случае было бы устаревшим в кеше браузера?
Итак, в основном я хотел бы знать, следует ли мне использовать Varnish И кеширование браузера или только Varnish для веб-сайта, который обслуживает контент, который не изменяется? Есть ли здесь какое-то правило, что было бы «лучшей практикой»? Обычно я бы выбрал Varnish И кеширование в браузере, но вышеупомянутые веб-сайты, которые я видел, меня это смущали.
Вы должны использовать оба, и это две совершенно разные вещи.
Два кэша могут иметь разное время жизни для кэшированной записи / другой политики кеширования, и это нормально. Это зависит от характера кэшируемого ресурса.
Просто потому, что ты видишь Cache-Control: no-store, no-cache, must-revalidate
при проверке веб-сайта, например через curl
, это не значит, что нет Varnish и он не кеширует вещи.
Возьмем, к примеру, Magento 2. Сам Magento отправляет:
Cache-Control: max-age=86400, public, s-maxage=86400
Это то, что Лак видит. Таким образом, страница будет кэшироваться Varnish в течение 1 дня. Однако в Varnish VCL для Magento 2 он изменит Cache-Control
на выходе, чтобы браузеры вообще не кешировали. Итак, ответ, что ты увидим:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Почему это так:
Обычно вы хотите кэшировать статические ресурсы браузером, поэтому для этого типа ресурсов вы увидите заголовки Far Future Expires, например следующие:
Expires: Sat, 03 Aug 2019 14:24:01 GMT
Cache-Control: public, max-age=30672000
Для этих ресурсов многие люди любят настраивать Varnish так, чтобы они не кешировались. Это связано с тем, что в PHP нет тяжелой работы по выдаче этих файлов сервером, поэтому нет смысла вообще кэшировать их на сервере. Особенно с учетом того, что кеш Varnish по умолчанию использует бэкэнд RAM (вы можете разделить кеш для статических файлов хотя).
«Может быть, они хотят лучше контролировать контент, если им нужно что-то быстро изменить, что в противном случае было бы в устаревшем состоянии в кеше браузера?»
Вы тут же ответили на свой вопрос;)
При публикации нового контента делать недействительными кеши, над которыми вы не обязательно можете контролировать, и быстрое аннулирование старых кешей является большим благом для быстрого развертывания нового контента. Если вы не хотите об этом беспокоиться или вам не нужно, вы можете позволить браузеру кэшировать, чтобы снизить нагрузку на вашу инфраструктуру.