← Блог
8 апреля 2026 · 6 мин чтения

Стратегии кэширования на edge: от простого TTL до stale-while-revalidate

Кэширование — основа производительности CDN. Но выбор правильной стратегии зависит от типа контента, требований к свежести и паттернов доступа. Разберём основные подходы.

Cache-Control: основы

HTTP-заголовок Cache-Control определяет, как и как долго кэшировать ответ. Основные директивы:

# Кэшировать на CDN и в браузере на 1 час
Cache-Control: public, max-age=3600

# Только CDN, не браузер
Cache-Control: public, max-age=3600, private

# Не кэшировать
Cache-Control: no-store

# Всегда ревалидировать
Cache-Control: no-cache

Важно понимать разницу между no-cache и no-store:

Стратегия 1: Long TTL + Cache Busting

Для статических ресурсов (JS, CSS, изображения) лучшая стратегия — максимальный TTL с версионированием в URL:

Cache-Control: public, max-age=31536000, immutable

# URL содержит хэш контента
/assets/app.a1b2c3d4.js

Директива immutable говорит браузеру не ревалидировать ресурс даже при refresh страницы. Если контент изменится — изменится URL.

Когда использовать

Стратегия 2: Short TTL

Для контента, который меняется регулярно, но небольшая задержка допустима:

Cache-Control: public, max-age=60

Кэш обновится через минуту. Подходит для:

Стратегия 3: Stale-While-Revalidate

SWR — мощный паттерн, позволяющий отдавать устаревший контент пока обновляется кэш:

Cache-Control: public, max-age=60, stale-while-revalidate=3600

Как это работает:

  1. Первые 60 секунд — ответ «свежий», отдаётся из кэша
  2. 60-3660 секунд — ответ «устаревший», но отдаётся из кэша, а CDN асинхронно обновляет его
  3. После 3660 секунд — ждём ответ от origin
SWR обеспечивает мгновенные ответы для пользователей при сохранении относительной свежести данных.

Когда использовать

Стратегия 4: Stale-If-Error

Защита от падения origin:

Cache-Control: public, max-age=60, stale-if-error=86400

Если origin вернул ошибку (5xx), CDN отдаст устаревший кэш до 24 часов. Пользователи видят контент вместо страницы ошибки.

Инвалидация кэша

Иногда нужно немедленно очистить кэш — например, после публикации исправления. В EdgeByte это делается через API:

curl -X POST https://api.edgebyte.ru/v1/cdn/purge \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"urls": ["https://example.com/page/*"]}'

Purge распространяется по всем edge-локациям за <300 мс.

Паттерны инвалидации

Паттерн Когда использовать
Purge by URL Конкретная страница изменилась
Purge by prefix Обновился раздел сайта
Purge by tag Связанный контент (все товары бренда)
Purge all Деплой новой версии

Рекомендации по типам контента

Тип Стратегия Cache-Control
JS/CSS с хэшем Long TTL max-age=31536000, immutable
Изображения Long TTL max-age=2592000
HTML страницы SWR max-age=60, swr=3600
API ответы Short TTL max-age=10
Персональный контент Не кэшировать private, no-store

Заключение

Правильная стратегия кэширования может снизить нагрузку на origin в 10-100 раз и обеспечить мгновенные ответы для пользователей. Начните с SWR для большинства контента и оптимизируйте по мере накопления данных о паттернах доступа.

В EdgeByte CDN все эти стратегии настраиваются через правила или программно через Edge Functions.