Пришёл заказчик: «Сайт обновили, а я вижу старую версию. Всё сломалось!» Звучит как проблема с хостингом, но нет. Это кэш. Браузерное кэширование — один из самых недооценённых источников головной боли в веб-разработке.

Что такое кэширование и почему оно вообще существует

Когда вы первый раз заходите на сайт, браузер скачивает файлы: HTML, CSS, картинки, скрипты. Кэширование говорит браузеру: «Сохрани эти файлы на будущее — они вряд ли изменятся». При повторном визите сайт загружается быстрее, сервер меньше нагружен.

Проблема в том, что «вряд ли» — не то же самое, что «никогда». И браузер не умеет автоматически понимать, когда контент обновился.

Три места, где кэш ломает жизнь

Браузерный кэш. Браузер сохраняет статику локально. Ctrl+F5 или Cmd+Shift+R обычно помогает. Но некоторые пользователи не знают об этом, и поддержка получает десятки одинаковых жалоб.

CDN. Если сайт использует CDN (Content Delivery Network), файлы лежат на серверах по всему миру. Очистка CDN-кэша может занять от 5 минут до часа. Это значит, что обновление «выкатилось», но часть пользователей ещё видит старьё.

Прокси и корпоративные сети. В офисах часто стоят прокси-серверы, которые кэшируют ответы. Они-то уж точно не знают, что вы обновили сайт в пятницу вечером.

Что происходит с клиентом

Клиент обновил каталог товаров. Цены изменились. Но заказчик звонит и говорит: «У вас цены старые». Он не врёт — он действительно видит старую версию. И абсолютно уверен, что это ваша ошибка как разработчика.

В этот момент начинается объяснительная работа. Скриншоты, инструкции по очистке кэша, иногда TeamViewer. Всё ради того, чтобы пользователь увидел его собственный сайт.

Как с этим жить

Версионирование файлов. Добавлять хэш в имя файла: styles.css?v=1698765432. При каждом обновлении меняется хэш, браузер считает файл новым и загружает свежую версию.

Cache-Control заголовки. Настроить правильные заголовки на сервере: короткий срок для часто обновляемых ресурсов, длинный — для статики. Но не все хостинги дают это настроить.

Ожидание + инструкции. Если вы знаете, что обновление будет заметным — предупреждайте клиента заранее. «Через 30 минут сайт обновится полностью, некоторые пользователи могут видеть старую версию в течение часа».

Автоматическая очистка. Использовать Service Worker, который сам проверяет обновления и предлагает пользователю перезагрузить страницу.

Вывод

Кэш — это не баг, это особенность. Он делает интернет быстрее для всех. Но когда вы что-то меняете, кэш работает против вас. Если вы работаете с клиентами и вам важно, чтобы обновления видели именно они — заложите время на «кэш-адаптацию» в каждый релиз. Это не техническая проблема, это организационная.