CDN (content delivery network) - мережа серверів у різних країнах, що кешують вміст ближче до користувачів. Запит з Києва обслуговує вузол у Варшаві, а не сервер у Франкфурті чи Вірджинії.
Що дає CDN:
- швидкість - менша мережева затримка, особливо для далеких користувачів;
- розвантаження сервера - кешовані запити взагалі не доходять до застосунку;
- стійкість - CDN поглинає піки трафіку й частину DDoS-атак;
- оптимізації - стиснення, HTTP/3, перетворення зображень.
Що кешувати на CDN:
1. Статичні ресурси з хешем у назві (app-3f9a1c.js, logo-8b2e.png) - «назавжди»:
Cache-Control: public, max-age=31536000, immutable
2. Публічні сторінки для гостей (статті, каталог, лендинги) - короткий термін плюс фонове оновлення:
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
s-maxage - лише для спільних кешів (CDN), браузер його ігнорує.
3. Публічні відповіді API, однакові для всіх (довідники, курси).
Що НЕ кешувати:
- сторінки для автентифікованих користувачів - інакше один користувач побачить персональні дані іншого. Найнебезпечніша помилка з CDN;
- відповіді з
Set-Cookie; - форми з CSRF-токеном у HTML (токен «прилипне» до кешованої сторінки).
Як розрізняти гостей і автентифікованих: правило CDN «обходити кеш, якщо є cookie сесії» плюс заголовок Cache-Control: private, no-store від застосунку для персональних відповідей. Головне джерело правди - заголовки відповіді від застосунку, а не наявність cookie в запиті.
Інвалідація. Хешовані ресурси не потребують інвалідації (нова версія - нова назва). Для сторінок - короткий TTL або очищення через API CDN після публікації.
Пастка деплою: CDN може тримати старий HTML, що посилається на нові файли, або навпаки. Старі хешовані файли варто зберігати якийсь час після деплою.