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

Проверить это особенно легко на региональных лентах, где обновления идут часто и заметно. Если вы регулярно читаете последние свежие новости про Дагестан, то можете видеть, как в одном устройстве лента обновляется мгновенно, а в другом — будто «застряла» на старом наборе публикаций, хотя вы открываете одну и ту же страницу.

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

Кэш — это «память» браузера и сети, которая хранит копии страниц, картинок, скриптов и стилей. Цель простая: ускорить загрузку и снизить расход трафика. Если сайт уже открывался, браузер не хочет заново качать всё с нуля, особенно если изменения не критичны.

Кэширование происходит сразу на нескольких уровнях:

  • внутри браузера (диск/память устройства);
  • внутри сети (провайдерские прокси, корпоративные шлюзы);
  • на стороне CDN (узлы доставки контента ближе к пользователю);
  • на самом сайте (сервер отдаёт готовые «слепки» страниц).

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

Почему вы нажимаете F5, а лента всё равно старая

Обновление страницы в браузере не всегда означает «скачай заново всё». В типичном сценарии браузер:

  1. проверяет, можно ли использовать сохранённую версию;
  2. если можно — показывает её сразу;
  3. параллельно иногда делает «условный запрос» на сервер (проверка актуальности), но не всегда;
  4. если сервер говорит «не менялось», браузер оставляет старую копию.

Поэтому визуально кажется, что «ничего не обновилось», хотя технически браузер выполнил корректный (по его правилам) цикл.

CDN: причина, по которой два человека видят разные новости

CDN (сеть доставки контента) держит копии страниц и файлов на десятках или сотнях узлов по миру. Вы получаете страницу не с «главного сервера», а с ближайшей точки. Это ускоряет доступ, но добавляет нюанс: если правила обновления на CDN выставлены неудачно, один узел уже получил новую ленту, а другой ещё раздаёт старую.

Типичный эффект:

  • на мобильном интернете лента свежая (попали на один узел);
  • на домашнем Wi-Fi лента старая (попали на другой узел);
  • в режиме инкогнито стало лучше (другая сессия/другие заголовки);
  • через VPN — снова иначе (другая география, другой CDN-узел).

Для новостей это особенно заметно, потому что обновления частые, а разница «пять минут» уже видна по заголовкам.

Заголовки Cache-Control и почему они важнее любых «советов из интернета»

Решение о том, хранить страницу или нет, определяется заголовками ответа сервера. Самые важные:

  • Cache-Control — правила кэширования (сколько секунд можно хранить, нужно ли перепроверять);
  • Expires — «срок годности» (устаревший, но встречается);
  • ETag и Last-Modified — метки версии, по которым браузер понимает, изменилась ли страница.

Если у новостной ленты стоит большой max-age (например, на минуты или часы), браузер имеет полное право показывать старое. Если стоит «no-store» или короткий «max-age + must-revalidate», обновления будут чаще, но сервер получит больше запросов.

Заголовок / правило Что значит Как проявляется
Cache-Control: max-age=3600 Можно хранить 1 час Лента «застывает», пока не истечёт время
Cache-Control: no-cache Храни, но перепроверяй Чаще актуально, но иногда видны задержки
Cache-Control: no-store Не сохраняй вообще Всегда свежо, но загрузка может быть медленнее
ETag + If-None-Match Проверка версии Если «не менялось», браузер оставляет старую копию

Service Worker: когда «кэш» живёт своей жизнью

Многие сайты используют технологию PWA (почти-приложение в браузере). Там появляется service worker — фоновый скрипт, который может перехватывать запросы и отдавать контент из кэша по своим правилам. Иногда это сделано ради офлайна и скорости, но новостной ленте такая схема подходит не всегда.

Как это выглядит для пользователя:

  • страница открывается моментально, будто «из памяти»;
  • кнопка обновления почти не влияет;
  • после очистки данных сайта всё внезапно становится свежим;
  • на другом браузере проблема исчезает.

Если у сайта агрессивный service worker, он способен держать «устаревший снимок» до следующего корректного обновления скрипта.

Почему мобильное приложение даёт свежие новости, а браузер — нет

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

Отсюда эффект: «в приложении уже всё есть», а «в браузере пусто» — потому что это разные механики доставки данных.

Что делать пользователю: быстрые способы увидеть актуальную ленту

Ниже — методы от мягких к более радикальным. Делать всё подряд не нужно.

  1. Жёсткая перезагрузка: Ctrl+F5 (Windows) или Cmd+Shift+R (macOS). Это заставляет браузер запросить ресурсы заново чаще, чем обычное обновление.
  2. Открыть в приватном режиме: если там свежо — проблема почти наверняка в локальном кэше/куках/расширениях.
  3. Очистить кэш конкретного сайта (не весь браузер): в настройках сайта или через «Удалить данные сайта».
  4. Отключить расширения для теста: блокировщики, «ускорители», антибаннеры иногда вмешиваются в загрузку скриптов ленты.
  5. Сменить сеть (Wi-Fi ↔ мобильная): иногда вы упираетесь в кэширующий прокси провайдера.

Если после этого всё обновилось — это подтверждение, что проблема не в «новостях», а в цепочке доставки страницы.

Что делать владельцу сайта или редакции: как не получать жалобы «у вас старые новости»

Для новостей особенно важно разделять кэш статических файлов и кэш динамики.

  • Статика (CSS/JS/картинки) может кэшироваться долго, но с версионированием (hash в имени файла).
  • Лента и главная страница должны иметь короткий TTL или обязательную перепроверку.
  • CDN должен уметь быстро инвалидировать кэш по ключевым URL.
  • Service worker не должен «залипать» на HTML-ленте, если проект живёт обновлениями.

Отдельная тонкость — «скрытые» кэши. Например, сервер может отдавать HTML, собранный из кеша базы данных, и обновлять его раз в несколько минут. Для новостей это часто нормально, но тогда важно честно показывать время обновления ленты или метку «обновлено в…», чтобы не было ощущения ошибки.

Почему «устаревшая лента» чаще случается во время резонансных событий

Когда происходит что-то крупное, посещаемость растёт, и инфраструктура начинает защищаться от перегрузки. Включаются более агрессивные уровни кэширования, увеличивается TTL на CDN, вводятся очереди на обновление. Это помогает сайту не упасть, но повышает шанс, что часть аудитории увидит ленту с задержкой.

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

Короткая памятка: как понять, в каком месте «застряло» обновление

Симптом Вероятная причина Быстрая проверка
В инкогнито всё свежее Локальный кэш/куки/расширение Очистить данные сайта
На другой сети всё свежее Прокси/маршрут/другой CDN-узел Сменить сеть или включить VPN для теста
Старая только главная, а внутри статьи свежие HTML главной сильно кэшируется Открыть прямую ссылку на свежую публикацию
Страница грузится мгновенно и не меняется Service worker держит HTML Удалить данные сайта / отключить SW

Итог

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

Для пользователя решение обычно простое: жёсткая перезагрузка, проверка в приватном режиме, очистка данных сайта. Для владельца сайта задача шире: правильно разнести статику и динамику, управлять TTL, не давать service worker «замораживать» HTML и быстро инвалидировать кэш во время важных обновлений.