The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Компания Cloudflare реализовала модуль для поддержки HTTP/3 в NGINX

17.10.2019 18:51

Компания Cloudflare подготовила модуль для обеспечения поддержки протокола HTTP/3 в NGINX. Модуль выполнен в форме надстройки над развиваемой в Cloudflare библиотекой quiche с реализацией транспортного протокола QUIC и HTTP/3. Код quiche написан на языке Rust, но сам модуль для NGINX написан на языке Си и обращается к библиотеке при помощи динамического связывания. Наработки открыты под лицензией BSD.

Для сборки достаточно загрузить патч к nginx 1.16 и код библиотеки quiche, после чего пересобрать nginx с опциями "--with-http_v3_module --with-quiche=../quiche". При сборке поддержка TLS должна базироваться на библиотеке BoringSSL ("--with-openssl=../quiche/deps/boringssl"), использование OpenSSL пока не поддерживается. Для приёма соединений в настройки нужно добавить директиву listen с флагом "quic" (например "listen 443 quic reuseport").

Из клиентского ПО поддержка HTTP/3 уже добавлена в экспериментальные сборки Chrome Canary и утилиту curl. На стороне сервера до сих пор требовалось использовать ограниченные по своим возможностям обособленные тестовые реализации. Возможность обработки HTTP/3 в nginx позволит существенно упростить развёртывание серверов с поддержкой HTTP/3 и сделает более доступным тестовое внедрение нового протокола. Появление штатной поддержки HTTP/3 в nginx ожидается в ветке 1.17.x в течение 6-12 месяцев.

Напомним, что HTTP/3 стандартизирует использование протокола QUIC в качестве транспорта для HTTP/2. Протокол QUIC (Quick UDP Internet Connections) c 2013 года развивается компанией Google в качестве альтернативы связке TCP+TLS для Web, решающей проблемы с большим временем установки и согласования соединений в TCP и устраняющей задержки при потере пакетов в процессе передачи данных. QUIC представляет собой надстройку над протоколом UDP, поддерживающую мультиплексирование нескольких соединений и обеспечивающую методы шифрования, эквивалентные TLS/SSL.

Основные особенности QUIC:

  • Высокая безопасность, аналогичная TLS (по сути QUIC предоставляет возможность использования TLS поверх UDP);
  • Контроль за целостностью потока, предотвращающий потерю пакетов;
  • Возможность мгновенно установить соединение (0-RTT, примерно в 75% случаях данные можно передавать сразу после отправки пакета установки соединения) и обеспечить минимальные задержки между отправкой запроса и получением ответа (RTT, Round Trip Time);
  • Не использование при повторной передаче пакета того же номера последовательности, что позволяет избежать двусмысленности при определении полученных пакетов и избавиться от таймаутов;
  • Потеря пакета влияет на доставку только связанного с ним потока и не останавливает доставку данных в параллельно передаваемых через текущее соединение потоках;
  • Средства коррекции ошибок, минимизирующие задержки из-за повторной передачи потерянных пакетов. Использование специальных кодов коррекции ошибок на уровне пакета для сокращения ситуаций, требующих повторной передачи данных потерянного пакета.
  • Границы криптографических блоков выравнены с границами пакетов QUIC, что уменьшает влияние потерь пакетов на декодирование содержимого следующих пакетов;
  • Отсутствие проблем с блокировкой очереди TCP;
  • Поддержка идентификатора соединения, позволяющего сократить время на установку повторного соединения для мобильных клиентов;
  • Возможность подключения расширенных механизмов контроля перегрузки соединения;
  • Использование техники прогнозирования пропускной способности в каждом направлении для обеспечения оптимальной интенсивности отправки пакетов, предотвращая скатывание в состояние перегрузки, при которой наблюдается потеря пакетов;
  • Заметный прирост производительности и пропускной способности, по сравнению с TCP. Для видеосервисов, таких как YouTube, применение QUIC показало сокращение операций повторной буферизации при просмотре видео на 30%.


  1. Главная ссылка к новости (https://blog.cloudflare.com/ex...)
  2. OpenNews: Новая версия curl 7.66.0 с начальной поддержкой HTTP/3
  3. OpenNews: В Chrome добавлена экспериментальная поддержка протокола HTTP/3
  4. OpenNews: Компания Cloudflare открыла код реализации протокола QUIC на языке Rust
  5. OpenNews: HTTP поверх протокола QUIC будет стандартизирован как HTTP/3
  6. OpenNews: Компания Google развивает новый сетевой протокол QUIC
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/51695-quic
Ключевые слова: quic, http3, nginx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Ilya Indigo (ok), 19:07, 17/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    > Первый абзац.

    Пусть оставляют себе, дождусь нормальной нативной реализации.

     
     
  • 2.3, Аноним (3), 20:09, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    плюсую)
     
  • 2.4, анонимчик (?), 20:13, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Это маловероятно что скоро. Пилить такую нудятину никому не охота, а rust вдохновляет
     
     
  • 3.5, Ilya Indigo (ok), 20:17, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://www.opennet.me/openforum/vsluhforumID3/118512.html#64
    > HTTP/3 запланирован в 1.17.x и точно появится в течение ближайшего года, может быть даже быстрее, полгода.

    Нормальных разработчиков вдохновляют нормальные инструменты.

     
     
  • 4.12, red75prim (?), 21:26, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Нормальные инструменты это ASAN+UBSAN+TSAN+MSAN+Fuzzing+C?
     
  • 4.22, Аноним (22), 01:44, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Разработчиков вдохновляют сугубо их доходы. Всё остальное - пустой трёп.
     
  • 2.6, aaa (??), 20:44, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Так понимаю, тебе не чтобы работало, а чтобы шашечки?
     
     
  • 3.7, SOska (?), 20:53, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да
     
  • 3.9, Ilya Indigo (ok), 21:19, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Так понимаю, тебе не чтобы работало, а чтобы шашечки?

    Мне чтобы оно не просто абы как, абы через что работало, а работало производительно и быстро на нативных компонентах.

     
  • 2.8, anonymous (??), 21:07, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты вообще понимаешь что такое Rust?
     
     
  • 3.10, Ilya Indigo (ok), 21:22, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    > Ты вообще понимаешь что такое Rust?

    Знаю. ООП ЯП, аля D, без GB, с уклоном в многопроцессность и безопасную работу с памятью.

     
     
  • 4.13, АНБ (?), 22:27, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • –11 +/
    Нуб, Rust системный язык как и Си/Кресты
     
     
  • 5.18, gsdh (?), 23:59, 17/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    баш системный,а эти ваши - смузи
     
     
  • 6.20, xm (ok), 00:50, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    bash это смузи, а системный это POSIX sh
     
  • 5.23, kornoux (?), 08:28, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ОС для Symbolics была на LISP написана, так он теперь тоже системный?
     
     
  • 6.32, Ordu (ok), 00:09, 19/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    лисп -- это отдельный случай. Он сразу всё, он на то и лисп. И функциональный, и декларативный, и императивный, и ООП, и системный, и прикладной, и шелл, и вообще всё-всё-всё и ещё больше.
     
  • 4.26, фывфывфыв (?), 09:16, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ООП ЯП

    Ну вот сразу и неправда =) Rust такой-же ООП как и Go -_-"

     
     
  • 5.27, anonymous (??), 10:20, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Так формально Go соответствует признакам ООП.
     
  • 3.15, Аноним (15), 23:26, 17/10/2019 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
     
  • 4.19, НяшМяш (ok), 00:42, 18/10/2019 Скрыто ботом-модератором     [к модератору]
  • +3 +/
     

     ....ответы скрыты (19)

  • 1.14, Аноним (14), 22:39, 17/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > использование OpenSSL пока не поддерживается

    Сразу досвидания.

     
     
  • 2.24, anonnn (?), 08:51, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    анону платят за рекламу openssl? зачем он там?
     

  • 1.25, Аноним (25), 08:56, 18/10/2019 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     

  • 1.29, Аноним (29), 15:59, 18/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Собрал под 8 центос, но почему то не пашет, видно что стало слушать и по udp, но хром из дева стал ругаться на сертификат из локального acme, хотя он добавлен в трастед на уровне системы, и все равно идет использование http2
     
  • 1.30, Аноним (30), 18:56, 18/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    UDP надеялся отомрет, оставшись только там где это реально надо. ntp, dns убрали. Плюс tls поверх udp да убейтесь вы об стену, да уж рекордные ддосы впереди, ибо как разгребать тлс и отличать вообще хз. Влетит гуглу петабитик может подумают головой.
     
     
  • 2.31, Аноним (31), 20:51, 18/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > UDP надеялся отомрет...

    Влажные мечты, пустые надежды. UDP был и продолжает использоваться инструмент для тех задач где он выгоден. А про их предыдущую связку DTLS вы не в курсе?

    Возьмите и вспомните что вообще было с http, сначала потребовалось использовать удержание коннекта, чтобы посылать кучу запросов, потом мультиплексирование запросов, сжатие, шифрование и пуш-ответы. Теперь вот требуется медиапотоки слать еще и в реальном времени. А медиапотоки без UDP это как? А то и до http3 придумали WebRTC, но там половина VoIP стека прикручена сбоку... SDP, STUN, TURN, ICE, DTLS-SRTP. Последний, на минуточку, строго по UDP.

    Вкиньте уже гуглу этот петабитик, вдруг получится.

    Я, конечно, не берусь судить, но у меня есть некоторые сомнения насчёт вашей компетентности...
    DDoS неизвестного происхождения в общем случае не имеет серебряной пули. Надеяться на отказ от TLS и UDP, потому что у кого-то там не получается разобраться, устранить причину и договориться с вышестоящим провайдером о блокировке траффика, это смешно.

     
  • 2.33, Анонимный пользователь Интернета (?), 15:36, 19/10/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >гуглу
    >петабитик

    Это ты его принесёшь что ли, горлопан? Ты хотя бы примерно себе поток в петабит представляешь или просто слово красивое услышал и понравилось? UDP он запрещать собрался, поглядите вы на этого клоуна. Марш уроки учить.

     

  • 1.34, OldMonster (ok), 03:03, 21/10/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Из клиентского ПО поддержка HTTP/3 уже добавлена в экспериментальные сборки Chrome Canary и утилиту curl

    Вот, в принципе, этим всё сказано.
    Ну собрал, ну поставил.. дальше курл др.чить?

    нет, ребята.
    Мы меедленно спустимся с горы.. эм, тфу...
    В смысле - дождёмся поддержки браузерами, а к тому времени, глядишь и в nginx нативный HTTP/3 появится.

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

     
  • 1.35, Отморозок (?), 13:11, 09/01/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> поддержка HTTP/3 уже добавлена в экспериментальные сборки Chrome Canary
    >> Ежедневное обновление для разработчиков (шапка c сайта)
    >> Linux не поддерживается.

    А на чём, в основном, сидят разрабы?
    Ну да, ну да. Пошёл я нахер.

    В общем, дико хотел попробовать, потому вручную со скрипом забилдил эту хрень под Nginx. Вначале под 1.17.7, но когда ничего не заметил особо хорошего, перебилдил под 1.16.1, как и рекомендовали клаудфлари.
    А теперь я узнаю, что кроме как теребоньканьем курла и не потестить, по сути. Горит.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру