KernelHub®
← Все материалы
ВЕБ / РУКОВОДСТВО 05 / 7 МИНУТ

HTTP-кэш: быстрее, но предсказуемо

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

Свежесть и повторная проверка

Кэш может использовать свежий ответ в течение разрешённого срока. Когда ответ устарел, сервер может подтвердить, что содержимое не изменилось, с помощью валидатора 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: промежуточный узел может менять правила.

Читать в первоисточниках

Сначала понять. Затем изменить.Другие материалы →