# CDN

> Сеть распределённых по миру кеширующих серверов, которая отдаёт контент пользователю с ближайшей точки присутствия, снижая задержку и нагрузку на исходный сервер.

Источник: https://llmdocs.ru/wiki/cdn/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Полное название**: Content Delivery Network
- **Появление**: конец 1990-х (Akamai, 1998)
- **Основа**: кеширующие обратные прокси в точках присутствия (PoP)
- **Маршрутизация**: DNS (GeoDNS) или anycast
- **Управление кешем**: заголовки Cache-Control, ETag, Age (RFC 9111)
- **Примеры провайдеров**: Akamai, Cloudflare, Fastly, Amazon CloudFront, Google Cloud CDN
**CDN** (англ. *Content Delivery Network* — сеть доставки контента) — распределённая сеть серверов, расставленных в дата-центрах по всему миру, которая хранит копии контента сайта и отдаёт их пользователю с ближайшего узла. Вместо того чтобы каждый запрос шёл через океан к исходному серверу (*origin*), браузер получает картинку, скрипт или видеофрагмент из точки присутствия в своём городе. Это сокращает задержку, разгружает origin и помогает переживать всплески трафика и DDoS-атаки.

## История

Идея появилась в конце 1990-х, когда популярные сайты не выдерживали наплыва посетителей («эффект Slashdot»). В 1998 году исследователи MIT основали Akamai, построившую одну из первых коммерческих сетей доставки.[5] В 2000-х CDN стали стандартом для медиа и программных обновлений, а в 2010-х — и для обычных сайтов: Cloudflare, Fastly и облачные провайдеры (Amazon CloudFront, Google Cloud CDN) сделали подключение делом нескольких минут. Сегодня через CDN проходит большая часть веб-трафика, включая потоковое видео.

## Как работает

CDN состоит из **точек присутствия** (PoP, *Point of Presence*) — площадок с кеширующими серверами. По сути каждый узел — это [обратный прокси](https://llmdocs.ru/wiki/reverse-proxy.md) с большим кешем.

1. Пользователь запрашивает `static.example.com`. Домен указывает на CDN — обычно через запись CNAME (см. [DNS-записи (A, AAAA, CNAME, MX, TXT)](https://llmdocs.ru/wiki/dns-records.md)).
2. CDN направляет запрос в ближайший PoP одним из двух способов:
   - **GeoDNS** — [DNS](https://llmdocs.ru/wiki/dns.md)-сервер CDN возвращает разные IP в зависимости от расположения резолвера;
   - **anycast** — один и тот же IP-адрес анонсируется по BGP из всех точек, и маршрутизация интернета сама доставляет пакеты к ближайшей.[6]
3. Узел проверяет кеш. Если объект есть и свежий — **попадание** (*cache hit*), ответ уходит сразу. Если нет — **промах** (*miss*): узел запрашивает объект у origin (часто через промежуточный уровень — *origin shield*), отдаёт пользователю и сохраняет.
4. На узле же обычно завершается [TLS](https://llmdocs.ru/wiki/tls.md): короткое рукопожатие с ближним сервером заметно ускоряет первую загрузку.

Ключевая метрика — **cache hit ratio**, доля запросов, обслуженных из кеша. Чем она выше, тем меньше нагрузка на origin и быстрее ответы.

## Управление кешем

Что и как долго хранить, CDN решает по стандартным заголовкам кеширования [HTTP](https://llmdocs.ru/wiki/http.md).[1][2]

| Заголовок | Назначение |
|---|---|
| `Cache-Control: max-age=N` | сколько секунд ответ свежий для любого кеша |
| `Cache-Control: s-maxage=N` | то же, но только для общих кешей (CDN, прокси) |
| `Cache-Control: no-store` / `private` | не кешировать / кешировать только в браузере |
| `ETag`, `Last-Modified` | валидаторы для условных запросов (`304 Not Modified`) |
| `Vary` | от каких заголовков запроса зависит ответ (например, `Accept-Encoding`) |
| `stale-while-revalidate` | разрешает отдать устаревшую копию, пока в фоне идёт обновление[3] |

Ключ кеша по умолчанию — схема, хост, путь и строка запроса. Лишние параметры (`utm_source` и подобные) дробят кеш, поэтому их часто исключают из ключа в настройках CDN.

Есть два способа обновлять контент:

- **версионирование имён** — файлы собираются с хешем в имени (`app.3f9a1c.js`) и кешируются «навсегда» (`max-age=31536000, immutable`), а новая версия получает новое имя. Это предпочтительный путь;
- **инвалидация** (*purge*) — явная команда CDN удалить объект или группу объектов по пути или тегу. Она нужна для HTML и контента, у которого адрес постоянный.

```bash
# посмотреть, отдан ли ответ из кеша CDN
curl -sI https://example.com/logo.png | grep -iE 'cache-control|age|x-cache|cf-cache-status'
```

Заголовок `Age` показывает, сколько секунд объект лежит в кеше; провайдеры добавляют свои — `X-Cache: HIT`, `CF-Cache-Status: HIT` и т. п.

## Что ещё делает CDN

- **Защита от DDoS** — распределённая сеть поглощает объёмные атаки, а веб-фильтр (WAF) отсекает вредоносные запросы.
- **Сжатие и оптимизация** — Brotli/gzip, преобразование изображений в WebP/AVIF, поддержка [HTTP/2 и HTTP/3](https://llmdocs.ru/wiki/http2-http3.md).
- **Потоковое видео** — HLS и DASH нарезают видео на короткие сегменты, которые прекрасно кешируются.
- **Вычисления на краю** (*edge computing*) — небольшие функции, исполняемые прямо в PoP (Cloudflare Workers, Fastly Compute, Lambda@Edge): редиректы, A/B-тесты, проверка токенов.

## Ограничения

- Динамические персональные страницы кешировать нельзя или трудно — для них CDN даёт в основном выигрыш на TLS и маршруте.
- Неверные заголовки опасны: кеширование ответа с `Set-Cookie` или персональными данными может показать чужую страницу другому пользователю.
- CDN становится единой точкой отказа: сбой крупного провайдера выводит из строя тысячи сайтов одновременно.
- Провайдер видит расшифрованный трафик, поскольку TLS завершается на его узлах.

Для небольшого сайта, например [статического](https://llmdocs.ru/wiki/static-site-generators.md), CDN часто достаточно даже без собственного сервера: многие хостинги сами раскладывают файлы по своей сети.

## См. также

- [Балансировка нагрузки](https://llmdocs.ru/wiki/load-balancing.md)
- [nginx](https://llmdocs.ru/wiki/nginx.md)
- [QUIC](https://llmdocs.ru/wiki/quic.md)
- [Обратный прокси (reverse proxy)](https://llmdocs.ru/wiki/reverse-proxy.md)

## Источники

1. [RFC 9111 — HTTP Caching](https://www.rfc-editor.org/rfc/rfc9111)
2. [MDN — HTTP caching](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching)
3. [RFC 5861 — HTTP Cache-Control Extensions for Stale Content](https://www.rfc-editor.org/rfc/rfc5861)
4. [Cloudflare Learning — What is a CDN?](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/)
5. [Nygren, Sitaraman, Sun — The Akamai Network: A Platform for High-Performance Internet Applications (2010)](https://dl.acm.org/doi/10.1145/1842733.1842736)
6. [RFC 4786 — Operation of Anycast Services](https://www.rfc-editor.org/rfc/rfc4786)
