Перейти к содержимому

Кэширование: TTL и кэш браузера

Кэш — сердце CDN: сколько хранить объекты, когда их обновлять и что делать при сбое источника. Здесь разбираем настройки кэша для подключённых сайтов и CDN-ресурсов — и честно помечаем, чего в панели ещё нет.

Карточка CDN-ресурса → «Кэширование» → «Настроить»:

  • TTL кэша на edge — секунды, от 1 до 2 592 000 (30 дней). Применяется, когда у ответа источника нет Cache-Control/Expires, или когда включено игнорирование заголовков. Пусто = доверять только заголовкам источника.
  • «Игнорировать заголовки кэша источника» — origin отдаёт no-store, а вы хотите кэш? Включите — панель будет считать TTL по своему значению.

Карточка сайта → вкладка «Кэширование»:

  • Тумблер кэша и «TTL по умолчанию, дней» (1–365);
  • Обработка query-строки: учитывать целиком / игнорировать / учитывать только выбранные параметры (например, только v и ver — тогда app.js?v=2 и ?v=3 — разные объекты, а ?utm=… не плодит копий);
  • stale-while-revalidate, часов — сколько отдавать устаревший объект, пока фоном обновляется новый;
  • stale-if-error, часов — сколько отдавать устаревший объект, если источник упал. Спасает картинку сайта при аварии origin;
  • «TTL поверх origin» — игнорировать Cache-Control источника.
Контент Рекомендация
Хэшированные ассеты (app.a1b2c3.js) Долго: неделя–месяц; имя меняется — контент новый
Картинки товаров, аватары День–неделя + purge при обновлении
HTML-страницы Коротко: минуты, или вообще не кэшировать
API-ответы Не кэшировать (или короткий TTL с игнорированием кук)

Браузер кэширует объекты по заголовкам ответа. В CDN-ресурсах в карточке видна строка «TTL в браузере» с пометкой «появится в следующем обновлении» — управление браузерным кэшем из панели в разработке. Сейчас браузер опирается на заголовки источника, поэтому для точного контроля браузерного кэша настраивайте Cache-Control на самом origin.

Режима «всегда онлайн» (отдача кэша при полном отказе источника) в панели пока нет. Ближайший аналог — stale-if-error: устаревшие объекты продолжают отдаваться заданное число часов при сбое источника.

Заголовки ответа на объект: повторные запросы возвращают попадание в кэш (X-Cache: HIT в заголовках ответа edge). Время ответа падает с сотен миллисекунд (origin) до единиц-десятков (кэш).

Симптом Причина Что делать
Обновление «не подхватывается» Долгий TTL / origin с кэшируемыми заголовками Очистите кэш (purge); настройте TTL
Кэш вообще не работает Origin отдаёт Cache-Control: no-store Включите «Игнорировать заголовки» / «TTL поверх origin»
Разные версии файла путаются Query-строки игнорируются Переключите на «учитывать целиком» или выберите параметры
Сайт «моргает» старым контентом stale-while-revalidate отдаёт устаревшее Уменьшите окно SWR до 0
Что лучше: короткий TTL или частые purge?

По умолчанию — длинный TTL для версионированной статики и короткий для HTML. Purge — точечный инструмент для экстренных обновлений, а не образ жизни: очистка сбрасывает прогрев кэша.

Считается ли трафик из кэша?

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

Кэш видит мои куки/логины?

Ответы с авторизационными куками не кэшируются в общем кэше. Включая «TTL поверх origin», вы отвечаете за то, чтобы кэшируемое действительно было публичным.