Wiki
Web / стек

HTTP-кэширование — что это простыми словами

HTTP-cache — механизмы Cache-Control / ETag / Last-Modified, позволяющие браузеру и CDN хранить ответы и не дёргать сервер повторно. Экономия 60-95 % трафика.

HTTP-кэширование — набор заголовков, регулирующих, когда браузер/CDN могут повторно использовать уже полученный ответ вместо нового запроса. Правильная настройка — самая дешёвая и мощная оптимизация web-производительности.

Ключевые заголовки: (1) `Cache-Control: public, max-age=31536000, immutable` — статика (JS/CSS с хешем в имени) — год, никогда не re-validate. (2) `Cache-Control: private, max-age=0, must-revalidate` — HTML пользователя — всегда re-validate. (3) `Cache-Control: s-maxage=60` — CDN держит 60 сек, браузер не кеширует. (4) `ETag: "abc123"` + `If-None-Match` — сервер отвечает 304 Not Modified, если ETag совпал.

Стратегии: (1) Immutable статика с хешем — `app.a3f9b7.js`, `Cache-Control: max-age=31536000, immutable` — браузер вообще не спрашивает. (2) Stale-While-Revalidate — `Cache-Control: max-age=60, stale-while-revalidate=86400` — 60 сек fresh, далее сутки отдаём кэш + фоново обновляем. (3) Vary: Accept-Encoding, Accept-Language — раздельные кеши для разных клиентов.

Проблемы: (1) забыли `no-store` на странице банк-транзакции → секретные данные в кеше. (2) забыли хеш в JS → обновление сайта не доходит до пользователей неделями. (3) неверный `Vary` → CDN отдаёт gzip клиенту без gzip → 500 ошибок.

Частые вопросы

Cache-Control vs Expires — что использовать?
Cache-Control — современный, побеждает Expires. Оставьте только Cache-Control.
Как принудительно очистить кеш пользователя?
Никак — только менять URL (хеш в имени). Cache-busting query (`?v=123`) работает, но плохо для CDN.

Смотрите также