Кэширование: 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 источника.
Как выбрать TTL
Заголовок раздела «Как выбрать TTL»| Контент | Рекомендация |
|---|---|
Хэшированные ассеты (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», вы отвечаете за то, чтобы кэшируемое действительно было публичным.