INTEGRITY Документация

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, выполните следующие действия:

  1. На панели управления Cloudflare перейдите к разделу Speed > Настройки страницу.

    Перейдите в Настройки ↗
  2. Перейдите в Оптимизация протокола вкладку и в разделе HTTP/2 to Origin установите переключатель в положение Off.

Мультиплексирование соединений

Cloudflare поддерживает мультиплексирование HTTP/2 от своей глобальной периферийной сети до ваших серверов источника. Вместо открытия нового TCP-соединения для каждого входящего запроса несколько потоков HTTP/2 используют одно долгоживущее TCP-соединение. Это значительно снижает затраты на установление и закрытие соединений, повышая эффективность и производительность взаимодействия между Cloudflare и вашим источником.

Объединяя множество запросов в меньшее число TCP-соединений, Cloudflare снижает количество активных соединений, которые приходится поддерживать вашему источнику. Это особенно важно для бэкендов, чувствительных к накладным расходам на соединения или к ограничениям ресурсов.

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

Когда поступает новый запрос, Cloudflare пытается использовать уже существующее соединение HTTP/2 с источником:

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

Жизненный цикл соединения

Преимущества

Преимущество Описание
Меньше TCP-рукопожатий Несколько запросов используют одно долгоживущее TCP-соединение, что минимизирует частое пересоздание соединений.
Более низкая задержка Устраняет повторные TCP/TLS-рукопожатия, уменьшая задержки передачи данных туда и обратно для новых запросов.
Снижение нагрузки на источник Источнику нужно обрабатывать меньше одновременных соединений, что снижает нагрузку на системы с ограниченными ресурсами.
Адаптивное масштабирование Во время резких скачков нагрузки (например, при отказоустойчивом переключении) Cloudflare сначала повторно использует доступные потоки, а затем при необходимости открывает новые соединения.

Поведение по умолчанию в зависимости от тарифного плана

План Состояние по умолчанию Максимум одновременных потоков на соединение Настраивается?
Free / Pro / Business Включено по умолчанию 200 Нет
Enterprise Отключено по умолчанию (1 поток на соединение) 1-200+ Да

Конфигурация

Мультиплексирование соединений включено по умолчанию на тарифах Free, Pro и Business и по умолчанию использует до 100 одновременных потоков. На тарифе Enterprise можно явно задать максимальное количество одновременных потоков для зоны (часто называемое «коэффициентом мультиплексирования») в панели управления или через API.

Dashboard

  1. Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
  2. Выберите домен, для которого будет использоваться настройка HTTP/2 to Origin.
  3. Выберите Speed > Optimization.
  4. Откройте Оптимизация протокола на вкладке.
  5. В разделе HTTP/2 to Origin, выберите Настройте и при необходимости настройте параметры потока.

API

Необходимые разрешения API-токена

Хотя бы одно из следующих права доступа токена требуется:
  • Zone Settings Write
  • Zone Write
Изменение настройки Origin H2 Max Streams
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 по возможности использует активные соединения повторно. Если достигнут лимит параллельных соединений, открываются новые. Число активных соединений может временно возрасти, но в целом их общее количество остаётся ниже, чем без мультиплексирования.

Долгоживущие или простаивающие запросы

Возможные ошибки 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 ↗).