Свежесть и повторная проверка
Кэш может использовать свежий ответ в течение разрешённого срока. Когда ответ устарел, сервер может подтвердить, что содержимое не изменилось, с помощью валидатора ETag или Last-Modified. Ответ 304 позволяет обойтись без повторной передачи тела.
Кэш браузера относится к одному пользователю, общий кэш CDN — к множеству пользователей. Для персональных ответов это принципиальная разница.
Три правила, которые часто путают
no-store запрещает сохранять ответ. no-cache допускает хранение, но требует успешной проверки перед повторным использованием. private запрещает хранение в общих кэшах, при этом личный кэш браузера может использовать ответ по остальным правилам.
Заголовок Cache-Control должен соответствовать природе данных. Не выдавайте персональные ответы как public. Кэширование запросов с авторизацией требует отдельного внимательного проектирования.
Версионируйте статические файлы
Для файла с хэшем содержимого в имени подходит длительный срок кэширования. Если содержимое меняется, меняется и URL. Файл по прежнему URL должен оставаться прежним.
Cache-Control: public, max-age=31536000, immutableДля HTML нужен другой срок: страница должна вовремя получить ссылки на новые версии ресурсов. Не применяйте годовой immutable ко всему сайту одним правилом.
Проверьте реальный ответ
curl -I https://example.com/
curl -I https://example.com/assets/app.abc123.cssСмотрите Cache-Control, ETag, Last-Modified, Age и Vary. Заголовки, добавленные CDN, зависят от провайдера. Проверяйте поведение снаружи, а не только настройки origin: промежуточный узел может менять правила.