Главная Статьи Оптимизация

Браузерный кэш (Cache-Control)

Когда человек открывает сайт второй раз, заставлять браузер заново качать тот же логотип, те же стили и скрипты — расточительство. Браузерный кэш позволяет сохранить эти файлы на устройстве и при следующем визите взять их с диска, мгновенно. Настраивается это парой заголовков от сервера. Разберём, как и что кэшировать.

Как это работает

При первом заходе браузер скачивает все файлы страницы. Если сервер разрешил их кэшировать, браузер сохраняет копии у себя. На повторном визите (или при переходе на соседнюю страницу того же сайта) он не идёт в сеть за уже знакомыми файлами, а берёт их из локального кэша. Результат — повторные открытия летают, нагрузка на сервер падает, а посетитель видит сайт почти мгновенно. Управляет этим заголовок Cache-Control, который сервер отдаёт вместе с каждым файлом.

Cache-Control: public, max-age=31536000

Здесь max-age=31536000 — срок хранения в секундах (тут год). То есть «эту картинку можно держать в кэше год, не переспрашивая сервер».

Что кэшировать надолго, а что нет

📦 Статика — надолго
Картинки, шрифты, CSS и JS меняются редко. Им ставят большой срок (месяцы, год) — они почти не качаются повторно.
📄 HTML — коротко или без кэша
Сами страницы должны быть свежими, иначе человек увидит старый контент. Им кэш ставят короткий или отключают.

Логика простая: чем реже файл меняется, тем дольше его можно держать в кэше. Динамический HTML обновляется постоянно — его кэшируют осторожно. Неизменную статику — наоборот, надолго.

А если файл всё-таки изменился?

Тут возникает вопрос: если CSS закэширован на год, как показать посетителю обновлённую версию? Ответ — версионирование имени файла. К адресу добавляют метку версии, например style.css?v=12 или style.a1b2c3.css. Поменяли файл — поменяли метку, и для браузера это уже новый адрес, который он скачает заново. Так вы получаете и долгий кэш, и мгновенное обновление, когда нужно. Этот приём обычно встроен в CMS и сборщики.

⚠️ Не путайте браузерный кэш с кэшем CDN и кэшем страниц на сервере. Браузерный кэш — на устройстве посетителя (ускоряет повторные визиты конкретного человека). CDN-кэш — на узлах сети (ускоряет первый визит за счёт близости). Серверный кэш — экономит генерацию страницы. Они дополняют друг друга.

Как проверить

Откройте инструменты разработчика (вкладка «Сеть»), обновите страницу и посмотрите заголовки ответа для файлов — там должна быть строка Cache-Control с разумным max-age для статики. Если у картинок и стилей кэш не задан или стоит no-cache — браузер каждый раз качает их заново, и это легко исправить. Наличие кэширования также отмечают PageSpeed и сервисы скорости («задайте эффективный срок жизни кэша»).

Кэш — про повторные визиты, а первая загрузка ускоряется другими приёмами: сжатием gzip/Brotli, ленивой загрузкой и облегчением картинок. Общая картина — в статье как ускорить загрузку сайта.

Коротко

Браузерный кэш сохраняет файлы сайта на устройстве посетителя, чтобы при повторных визитах не качать их заново — страницы открываются почти мгновенно, а сервер разгружается. Управляет им заголовок Cache-Control: статику (картинки, шрифты, CSS, JS) кэшируют надолго, а HTML — коротко или без кэша. Чтобы обновлять закэшированные файлы, меняют версию в имени (style.css?v=12). Проверить кэш можно в инструментах разработчика и через PageSpeed.

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

Что такое браузерный кэш?
Это локальное хранилище браузера, куда он сохраняет файлы сайта (картинки, стили, скрипты) при первом визите. На повторных заходах браузер берёт их из кэша вместо повторной загрузки из сети, поэтому страницы открываются почти мгновенно, а нагрузка на сервер снижается.
Как настроить кэширование?
Кэшем управляет заголовок Cache-Control, который сервер отдаёт с каждым файлом, например «Cache-Control: public, max-age=31536000» (хранить год). Настраивается это на стороне сервера или хостинга, а на многих CMS — плагином. Статике задают большой срок, HTML — короткий или отключают кэш.
Что кэшировать надолго, а что нет?
Надолго (месяцы, год) кэшируют статику, которая меняется редко: картинки, шрифты, CSS и JS. А HTML-страницы кэшируют коротко или вовсе без кэша, потому что их содержимое обновляется и посетитель должен видеть свежую версию. Правило: чем реже файл меняется, тем дольше его можно держать в кэше.
Как обновить файл, если он закэширован надолго?
Используют версионирование имени: к адресу файла добавляют метку версии, например style.css?v=12 или style.a1b2c3.css. Когда вы меняете файл, вы меняете метку — для браузера это новый адрес, и он скачивает обновлённую версию. Так совмещаются долгий кэш и мгновенное обновление. Обычно это встроено в CMS и сборщики.
Чем браузерный кэш отличается от кэша CDN?
Браузерный кэш хранится на устройстве конкретного посетителя и ускоряет его повторные визиты. Кэш CDN хранится на узлах сети по миру и ускоряет первый визит за счёт близости сервера к пользователю. А серверный кэш экономит генерацию страницы. Это три разных уровня, и они дополняют друг друга.