← Speed / speed / optimization / protocol
HTTP/2 to Origin
Протокол представляет собой набор правил, регулирующих обмен или передачу данных между устройствами. Одним из важнейших протоколов, работающих на уровне взаимодействия человека с компьютером, где приложения получают доступ к сетевым службам, является HTTP (Hypertext Transfer Protocol).
HTTP является хорошо устоявшимся протоколом, у которого есть несколько версий, и каждая новая версия добавляет возможности, повышающие производительность по сравнению с предыдущей. Сегодня в интернете широко используются HTTP/1.1 и HTTP/2. HTTP/1.1 существует уже более десяти лет, а в 2015 году IETF (Internet Engineering Task Force) представила HTTP/2, добавивший ряд функций для сокращения времени загрузки страниц. Подробнее о различиях между HTTP/1.1 и HTTP/2 см. в HTTP/2 в сравнении с HTTP/1.1 ↗.
Доступность
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| Доступность | Да | Да | Да | Да |
Отключите HTTP/2 для источника
В Cloudflare соединение HTTP/2 с источником включено по умолчанию.
Если вы хотите отключить HTTP/2 to Origin, выполните следующие действия:
-
На панели управления Cloudflare перейдите к разделу Speed > Настройки страницу.
Перейдите в Настройки ↗ -
Перейдите в Оптимизация протокола вкладку и в разделе HTTP/2 to Origin установите переключатель в положение Off.
Мультиплексирование соединений
Cloudflare поддерживает мультиплексирование HTTP/2 от своей глобальной периферийной сети до ваших серверов источника. Вместо открытия нового TCP-соединения для каждого входящего запроса несколько потоков HTTP/2 используют одно долгоживущее TCP-соединение. Это значительно снижает затраты на установление и закрытие соединений, повышая эффективность и производительность взаимодействия между Cloudflare и вашим источником.
Объединяя множество запросов в меньшее число TCP-соединений, Cloudflare снижает количество активных соединений, которые приходится поддерживать вашему источнику. Это особенно важно для бэкендов, чувствительных к накладным расходам на соединения или к ограничениям ресурсов.
Как это работает
Когда поступает новый запрос, Cloudflare пытается использовать уже существующее соединение HTTP/2 с источником:
- Если соединение не достигло лимита одновременных потоков, Cloudflare мультиплексирует запрос через это же соединение.
- Если лимит потоков достигнут, Cloudflare при необходимости открывает новое TCP-соединение.
Соединения остаются активными и используются повторно, пока не станут неактивными или не достигнут лимита одновременных подключений.
Жизненный цикл соединения
-
Повторное использование соединений: Cloudflare поддерживает постоянные (keep-alive) TCP-соединения с вашим источником. Повторное использование продолжается, пока не будет достигнут лимит потоков HTTP/2 или соединение не перейдет в состояние простоя.
-
Тайм-аут простоя (900s): если соединение остается неактивным (без активных потоков) в течение 900 секунд, Cloudflare закрывает его. Попытка повторно использовать закрытое соединение может привести к ошибке
520ошибка. -
Keep-alive: Cloudflare периодически отправляет TCP keep-alive, чтобы обнаружить неотвечающие источники. После двух неотвеченных проверок соединение сбрасывается.
- Первый зонд после ~30 секунд бездействия
- Вторая проверка через 15 секунд
-
Разрыв соединения: соединения также могут закрываться по следующим причинам:
- Решения балансировки нагрузки
- Обслуживание дата-центра или узла
- Достижение максимального лимита одновременных подключений
- Источник или промежуточная сеть закрывают простаивающие соединения
Преимущества
| Преимущество | Описание |
|---|---|
| Меньше TCP-рукопожатий | Несколько запросов используют одно долгоживущее TCP-соединение, что минимизирует частое пересоздание соединений. |
| Более низкая задержка | Устраняет повторные TCP/TLS-рукопожатия, уменьшая задержки передачи данных туда и обратно для новых запросов. |
| Снижение нагрузки на источник | Источнику нужно обрабатывать меньше одновременных соединений, что снижает нагрузку на системы с ограниченными ресурсами. |
| Адаптивное масштабирование | Во время резких скачков нагрузки (например, при отказоустойчивом переключении) Cloudflare сначала повторно использует доступные потоки, а затем при необходимости открывает новые соединения. |
Поведение по умолчанию в зависимости от тарифного плана
| План | Состояние по умолчанию | Максимум одновременных потоков на соединение | Настраивается? |
|---|---|---|---|
| Free / Pro / Business | Включено по умолчанию | 200 | Нет |
| Enterprise | Отключено по умолчанию (1 поток на соединение) | 1-200+ | Да |
- Free/Pro/Business: мультиплексирование включается автоматически. Каждое соединение поддерживает до 200 одновременных потоков.
- Enterprise: мультиплексирование по умолчанию фактически отключено (1 поток). Вы можете включить и настроить параллелизм для каждой зоны (до 200 и более одновременных потоков).
Конфигурация
Мультиплексирование соединений включено по умолчанию на тарифах Free, Pro и Business и по умолчанию использует до 100 одновременных потоков. На тарифе Enterprise можно явно задать максимальное количество одновременных потоков для зоны (часто называемое «коэффициентом мультиплексирования») в панели управления или через API.
Dashboard
- Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
- Выберите домен, для которого будет использоваться настройка HTTP/2 to Origin.
- Выберите Speed > Optimization.
- Откройте Оптимизация протокола на вкладке.
- В разделе HTTP/2 to Origin, выберите Настройте и при необходимости настройте параметры потока.
API
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Zone Settings WriteZone Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/settings/origin_h2_max_streams" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"value": 100
}'См. Документация по API, где это описано подробнее.
Terraform
resource "cloudflare_zone_setting" "example" {
zone_id = "<ZONE_ID>"
setting_id = "origin_h2_max_streams"
value = 50
}Тайм-ауты и коды ошибок
| Условие | По умолчанию / Диапазон | Код ошибки | Описание |
|---|---|---|---|
| Proxy Read Timeout | 125 с (до 6000 с на плане Enterprise) | 524 |
Источник отвечал слишком долго. |
| Proxy Idle Timeout | 900 с (фиксировано) | 520 |
Соединение закрыто из-за простоя. |
| TCP Keep-Alive Interval | 30 с изначально, 15 с между проверками | 520 |
После двух пропущенных проверок Cloudflare сбрасывает соединение. |
| Тайм-аут установления TCP-соединения | 19 с | 522 |
Источник не завершил SYN-рукопожатие. |
| TCP ACK Timeout | 90 с | 522 |
Источник перестал подтверждать получение данных. |
Типичные сценарии
События переключения при отказе
При резком изменении трафика (например, во время переключения источника при сбое) Cloudflare по возможности использует активные соединения повторно. Если достигнут лимит параллельных соединений, открываются новые. Число активных соединений может временно возрасти, но в целом их общее количество остаётся ниже, чем без мультиплексирования.
Долгоживущие или простаивающие запросы
- Если ваши запросы превышают 125 секунд (например, при потоковой передаче), увеличьте значение Proxy Read Timeout (доступно только на плане Enterprise).
- Если источники закрывают соединения быстрее чем за 900 секунд, возможно частое пересоздание соединений, но Cloudflare автоматически устанавливает новые по мере необходимости.
Возможные ошибки 5xx
Некоторые ошибки 5xx, например 520 или 522, могут быть связаны с таймаутами простоя или недоступными источниками. Если уровень параллелизма задан слишком высоким для маломощного источника, всплески одновременных запросов могут перегрузить его и привести к сбросу потоков или кратковременным всплескам ошибок 5xx. Клиенты на плане Enterprise, которые столкнулись с этим, могут обратиться к своей команде по работе с аккаунтом Cloudflare или в поддержку с просьбой снизить лимит параллелизма: это уменьшит количество запросов, отправляемых к источнику одновременно, и поможет предотвратить перегрузку.
Часто задаваемые вопросы
Использует ли Cloudflare фиксированный коэффициент мультиплексирования?
На планах Free, Pro и Business используется 200 параллельных потоков на соединение. Пользователи плана Enterprise могут настроить от 1 до 200+ потоков.
Как Cloudflare масштабирует количество соединений при скачках нагрузки или переключении на резервный узел?
Cloudflare сначала повторно использует существующие keep-alive-соединения. Когда они достигают предела по количеству одновременных соединений, при необходимости открываются новые. Даже в периоды всплесков нагрузки общее число соединений обычно оказывается ниже, чем без мультиплексирования.
Что делать, если бэкенд чувствителен к параллельным запросам?
Пользователи плана Enterprise могут снизить лимит одновременных потоков. Cloudflare также учитывает заданный источником SETTINGS_MAX_CONCURRENT_STREAMS, что позволяет вашему серверу применять более строгие ограничения. CDN Cloudflare также предоставляет функцию Cache Locking, которая помогает избежать множества параллельных запросов к источнику во время повторной проверки актуальности. См. Ревалидация, где это описано подробнее.
Можно ли постепенно повышать уровень параллелизма?
Да. Вы можете постепенно изменять настройки HTTP/2 на источнике или настройку зоны Cloudflare, чтобы безопасно увеличивать число параллельных соединений.
Откуда Cloudflare подключается к моему источнику?
Cloudflare работает на базе плоской anycast-сети. Любой дата-центр может подключаться к вашему источнику напрямую, поскольку иерархия уровней L1 и L2 отсутствует. Подключения к источнику могут поступать от нескольких дата-центров по всему миру.
Выполняет ли Cloudflare предварительный прогрев соединений с источниками?
Нет. Соединения создаются по мере необходимости и повторно используются, когда это возможно. Постоянный пул простаивающих соединений отсутствует.
Как обрабатываются неактивные соединения?
Неактивные соединения закрываются после 900 секунд бездействия. Они не открываются заранее: новые соединения создаются по мере возобновления трафика.
Может ли Cloudflare закрывать активные TCP-соединения?
Только если источник закрывает их, происходит сетевая ошибка либо Cloudflare выполняет обслуживание или перераспределение нагрузки. Жёсткого максимального времени жизни для активных соединений не предусмотрено.
Совместимость протоколов
Учтите: если источник не поддерживает HTTP/2, Cloudflare устанавливает соединение по HTTP/1.1. Мы подключаемся к серверам, которые заявляют о поддержке HTTP/2, через ALPN ↗.
Если вы не уверены, поддерживает ли ваш сервер HTTP/2, рекомендуем проверить документацию исходного сервера или воспользоваться инструментом для тестирования реализации HTTP/2 (например, h2spec ↗).