STATUS IS UPВИКИ ПО ОПТИМИЗАЦИИ САЙТОВ
20Ускорить
Производительность и доставка / Ускорить

Руководство по кэшированию в браузере для владельцев сайтов

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

Руководство по кэшированию в браузере для владельцев сайтов — ВИЗУАЛЬНОЕ РУКОВОДСТВО
ЧИТАТЬ
7 мин
ИСТОЧНИКИ
6
ПОВТОРНО ПРОВЕРИТЬ
2027-03-27
проверено
Рецензент по веб-производительности и релиз-инжинирингу
КРАТКИЙ ОТВЕТ

Начните с решения.

Применяйте отдельное правило кэширования для каждого класса URL. Файлам, чьё содержимое по этому URL никогда не меняется — например, JS, CSS, шрифтам и изображениям с именами, содержащими хеш — задавайте длительное время свежести. Для HTML и других неверсированных ответов используйте политику, при которой браузер выполняет валидацию перед повторным использованием, когда это важно. При изменении ресурса публикуйте новый URL; длительный срок жизни кэша нельзя надёжно отменить для копий, которые ещё считаются свежими.

Начните с явных заголовков Cache-Control, затем проверьте заголовки и поведение браузера в тестовой среде. Сочетайте ответы, удобные для валидации, с ETag и, где доступно, Last-Modified. Рассматривайте персонализованные, аккаунтные, корзинные и чувствительные ответы отдельно от публичных страниц. SIU использует эту работу как проактивную оптимизацию доступности: она сокращает ненужную нагрузку на origin и предотвращает дефекты, связанные с кэшем, до того как они нарушат работу сайта.

ВИЗУАЛЬНОЕ РУКОВОДСТВО

Видеть работу как систему.

Используйте эту карту, чтобы связать решения из статьи, прежде чем применять отдельные тактики.

SIUУскорить
01Соотнесите политику с ресурсом, а не с сервером
02Используйте термины Cache-Control точно
03Версионируйте неизменяемые активы перед назначением долгого срока жизни
04Держите HTML актуальным через валидацию, а не через долгое кэширование
01

Соотнесите политику с ресурсом, а не с сервером

Сделайте инвентаризацию репрезентативных URL перед изменением заголовков: главная, контентная страница, application shell, CSS, JavaScript, изображения, шрифты, API, вход, аккаунт, корзина и загрузки. Для каждого зафиксируйте, является ли ответ публичным или персонализированным, изменяется ли URL при изменении байтов и как быстро исправление должно дойти до посетителей.

Составьте матрицу политик на основе инвентаризации. Публичному контент-ресурсу с адресом, зависящим от содержимого, нужна иная политика, чем HTML по стабильному адресу. Ответы без Cache-Control всё ещё могут кэшироваться эвристически, поэтому явные правила легче тестировать.

Время свежести

Период, в течение которого сохранённый ответ может быть повторно использован; max-age задаёт его в секундах.

02

Используйте термины Cache-Control точно

Cache-Control указывает браузерам и общим кэшам, как хранить и повторно использовать ответ. max-age=N разрешает повторное использование, пока ответ свеж. s-maxage=N задаёт время свежести для общих кэшей и переопределяет max-age там; браузеры игнорируют s-maxage. public разрешает хранение в любом кэше; private разрешает кэширование в браузере, но препятствует хранению в общих кэшах.

no-cache допускает хранение, но требует валидации у origin перед повторным использованием. no-store означает, что кэши не должны сохранять ответ, но это не полная мера приватности. Применяйте must-revalidate, когда недопустимо выдавать устаревший контент после истечения срока; при недоступном origin тогда может вернуться 504, а не устаревшая замена.

Избегайте тотального no-store

Он удаляет возможность хранения вместо просто требования проверки; оставьте его для ответов, которые действительно нельзя сохранять.

03

Версионируйте неизменяемые активы перед назначением долгого срока жизни

URL версионированного ресурса содержит отпечаток содержимого или версию релиза, например app.4f2c.js. Когда байты ресурса меняются, публикуйте другой URL и обновляйте ссылку в HTML. Кэш увидит новый ресурс, и посетители получат новый файл без необходимости инвалидировать каждый браузер.

Для представления, которое не будет меняться в течение срока свежести, практичным паттерном является Cache-Control: max-age=31536000, immutable. immutable подсказывает поддерживающим клиентам не выполнять условную повторную валидацию пока ресурс свеж. Не применяйте его и годичный max-age к изменяемому файлу с тем же URL. Сохраняйте предыдущие fingerprinted-версии активов, пока кэшированный HTML может на них ссылаться.

HTML — это манифест

HTML выбирает URL активов, поэтому последовательность релизов должна сохранять поколение, на которое есть ссылки.

04

Держите HTML актуальным через валидацию, а не через долгое кэширование

HTML обычно имеет стабильный, удобочитаемый URL и изменяется вместе с содержимым, ссылками на активы, feature-флагами или уведомлениями безопасности. Консервативный публичный паттерн для HTML — Cache-Control: no-cache с ETag и Last-Modified, когда платформа может корректно их генерировать. Браузер сохраняет тело, но перед повторным использованием делает условный запрос; не изменившийся ответ может вернуть 304 Not Modified без тела.

ETag идентифицирует версию ресурса. При устаревшем ответе браузер может отправить его в If-None-Match; если он совпадает, сервер отвечает 304, иначе отправляет новую репрезентацию. Руководства RFC рекомендуют, когда возможно, включать и ETag, и Last-Modified в 200-ответ. no-cache не гарантирует валидацию при навигации «Назад» или «Вперёд», так как браузер может восстановить снимок истории сеанса.

Качество валидатора

ETag должен меняться при изменении представления; протестируйте его между origin-ами и развертываниями.

05

Разделяйте публичную доставку и персонализованные/чувствительные ответы

Общий кэш, например CDN, может переиспользовать один ответ для нескольких пользователей. Не допускайте повторного использования аккаунт-специфичного HTML или API-данных между разными пользователями. Для персонализированного контента, который может храниться в браузере, разумная стартовая политика — private, no-cache: она запрещает общее хранение и требует валидации. Наличие Set-Cookie заголовка само по себе не останавливает кэширование.

Для ответов, которые не должны сохраняться, используйте no-store и пересмотрите код приложения, правила CDN, сервис-воркеры, браузерные хранилища, логи и страницы ошибок. Самих заголовков недостаточно для реализации программы приватности, соответствия или безопасности платежей. Привлеките квалифицированных специалистов по безопасности, приватности и платежам для оценки чувствительных потоков и применимых требований.

Изменения авторизации

Тестируйте вход, выход, переключение аккаунтов и изменение прав с тёплыми браузерными и CDN-кэшами.

06

Разворачивайте изменения кэша как обратимый релиз

Зафиксируйте базовые заголовки и поведение тела для прямых и повторных запросов. В staging разверните сначала версионированные активы, затем HTML, ссылающийся на них, и протестируйте старый кэшированный HTML против нового origin. Проверьте прямой путь к origin и путь через CDN, если оба существуют. В DevTools Network заголовки должны показывать заданную политику и ожидаемое поведение при повторных запросах.

Ведите манифест релиза с URL активов, правилами заголовков и версией конфигурации. Если релиз сочетает несовместимые клиентские файлы, восстановите совместимый HTML и поведение приложения, но не перезаписывайте опубликованный fingerprinted-файл. Перенастройте HTML на известное рабочее поколение и сохраняйте оба поколения, пока кэшированный HTML может к ним обращаться. Удаление из общего кэша (purge) не может заставить все браузеры сбросить свежую копию.

Проактивное исправление

Преобразуйте ошибки тестов заголовков, 404 для активов и несовпадения версий в пункты чеклиста для следующего релиза.

ДЕЙСТВИЕ / ПРОВЕРКА

Практический чек‑лист

  1. 01

    Инвентаризация классов ответов

    Классифицируйте примерные URL как публичные или персонализированные, изменяемые или версионированные.

    ПРОВЕРИТЬ: Включает HTML, активы, API, аутентификацию, аккаунт, корзину и страницы ошибок.
  2. 02

    Снимите текущие заголовки

    Зафиксируйте Cache-Control, ETag, Last-Modified, Age, Vary и статус на origin и CDN.

    ПРОВЕРИТЬ: Снимок до изменений существует для каждого примера.
  3. 03

    Добавьте отпечатки (fingerprint) изменяемым активам

    Сделайте сборку так, чтобы при изменении байтов публиковался новый URL актива.

    ПРОВЕРИТЬ: Изменённый актив производит новый URL и обновлённую ссылку в HTML.
  4. 04

    Назначьте явные политики

    Используйте длительные правила только для неизменяемых версионированных URL; для стабильных URL — политики, ориентированные на валидацию.

    ПРОВЕРИТЬ: Тесты заголовков соответствуют намеренной политике.
  5. 05

    Проверьте валидацию

    Убедитесь, что неизменённый документ возвращает 304 после условного запроса, а изменённый — 200 с новым ETag.

    ПРОВЕРИТЬ: Трассы в staging показывают оба пути.
  6. 06

    Проверьте границы приватности

    Протестируйте два аккаунта, выход, смену ролей и чувствительные маршруты с тёплыми кэшами.

    ПРОВЕРИТЬ: Ни один персонализированный ответ не пересёк пользователей.
  7. 07

    Доказать совместимость релиза

    Загрузите кэшированный старый HTML после следующего релиза.

    ПРОВЕРИТЬ: Старый и текущий HTML подгружают свои активы без 404 и ошибок скриптов.
  8. 08

    Документируйте откат

    Зафиксируйте рабочее поколение, версию заголовков, владельца и период хранения старых активов.

    ПРОВЕРИТЬ: Непроизводственная тренировка восстанавливает рабочее поколение без правки immutable-URL.
ВОПРОСЫ ДЛЯ ОБСУЖДЕНИЯ

Сравнивайте компромиссы, а не приватные данные.

Используйте эти вопросы с вашей командой или сообществом владельцев сайтов. Делитесь методами и уроками, но никогда не вставляйте учётные данные, данные клиентов или непубличные детали инфраструктуры.

  1. 01

    Какие классы URL на вашем сайте труднее всего классифицировать как публичные, персонализированные, неизменяемые или часто меняющиеся, и как вы документируете это решение?

  2. 02

    Какой тест последовательности релиза оказался наиболее полезным для обнаружения несоответствия старого HTML и новых активов до того, как посетитель это заметит?

  3. 03

    Где правила CDN, приложения и браузерного кэша перекрываются, и кто отвечает за проверку того, что их совокупное поведение соответствует намеренной политике?

ПОПУЛЯРНЫЕ / АВТОРИТЕТНЫЕ РЕСУРСЫ

Откройте исходные материалы.

IETFRFC 9111: HTTP Caching ↗

Разъясняет свежесть, валидацию, директивы кэша, инвалидирование и ограничения с чувствительной информацией.

Проверено 2026-09-27
IETFRFC 8246: HTTP Immutable Responses ↗

Определяет immutable-кэширование, сферу применения и проблемы повреждения.

Проверено 2026-09-27
MDN Web DocsHTTP caching ↗

Практические рекомендации по валидаторам, 304-ответам, персонализации и обходу кэша.

Проверено 2026-09-27
MDN Web DocsCache-Control header ↗

Справочник по max-age, s-maxage, no-cache, no-store, private, public и must-revalidate.

Проверено 2026-09-27
MDN Web DocsETag header ↗

Разъясняет entity tags, If-None-Match и валидацию 304.

Проверено 2026-09-27
web.devPrevent unnecessary network requests with the HTTP Cache ↗

Практические рекомендации по версионированным URL, валидаторам, политикам и развертыванию.

Проверено 2026-09-27

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

КРАТКИЕ УТОЧНЕНИЯ

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

Означает ли no-cache, что браузер не может сохранить страницу?

Нет. no-cache допускает хранение, но требует успешной валидации у origin перед повторным использованием. Используйте no-store только тогда, когда ответ действительно не должен храниться, при этом учитывая, что no-store сам по себе не обеспечивает полной приватности.

Стоит ли давать каждому статическому файлу срок жизни в один год?

Нет. Годичный max-age уместен только когда байты по этому URL не будут меняться в течение этого периода, обычно потому, что URL содержит fingerprint или версию. Изменяемым файлам с тем же URL нужна более короткая или ориентированная на валидацию политика.

Может ли purge в CDN исправить ошибку кэширования в браузере?

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

Status Is UP Editorial Team · Редакторы по повышению доступности

Проверено Рецензент по веб-производительности и релиз-инжинирингу. Опубликовано 2026-09-27; обновлено 2026-09-30.