Когда контент проходит через CDN, сеть не просто так берёт и кэширует всё подряд. Нужны правильные HTTP-заголовки — иначе трафик остаётся на origin-сервере, а ты платишь за бесполезный трафик.
Главные три: Cache-Control говорит CDN, как долго держать файл в кэше (max-age=3600 — час, max-age=31536000 — год). ETag или Last-Modified помогают CDN понять, обновился ли контент на сервере, не скачивая его заново. Без них CDN либо кэширует слишком долго и пользователи видят старый контент, либо кэширует слишком мало и весь трафик идёт на origin.
Второй уровень: Vary указывает, что кэш зависит от заголовка запроса (например, Vary: Accept-Encoding говорит, что есть разные версии — сжатая и несжатая). Забудешь про Vary — пользователь на мобиле получит десктопную версию. s-maxage в Cache-Control переопределяет max-age конкретно для CDN, полезно когда браузер кэширует 5 минут, а CDN должна держать месяц.
Ошибка в 90% случаев: забывают про Cache-Control вообще, или ставят max-age=0. Тогда CDN её не кэширует. Вторая ошибка — одинаковый Cache-Control для статики и динамики. Статику (JS, CSS, картинки) кэшируй на год. API и HTML — максимум час или вообще без кэша.
Проверяй заголовки ответа сервера перед запуском на CDN. Если видишь Cache-Control: no-cache или отсутствие Cache-Control вообще — это сигнал что-то менять на origin. Правильные заголовки — основа экономии трафика и скорости.
Кустов о CDN и лендах
@kustov_cdn_lendy
Три заголовка, без которых CDN не кэширует как надо
Этот пост опубликован в Telegram-канале Кустов о CDN и лендах. Подписаться можно по ссылке: @kustov_cdn_lendy.