0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В середине сентября в Google Chrome Canary в качестве эксперимента добавили поддержку протокола HTTP/3. Он обеспечивает работу HTTP вместе с QUIC. О возможностях протокола читайте в адаптированном переводе статьи HTTP/3: the past, the present and the future из блога Cloudflare.</p>
1
<p>В середине сентября в Google Chrome Canary в качестве эксперимента добавили поддержку протокола HTTP/3. Он обеспечивает работу HTTP вместе с QUIC. О возможностях протокола читайте в адаптированном переводе статьи HTTP/3: the past, the present and the future из блога Cloudflare.</p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Яйцо или курица, сервер или браузер: вечный вопрос</a></li>
3
<ul><li><a>Яйцо или курица, сервер или браузер: вечный вопрос</a></li>
4
<li><a>Как всё начиналось: эволюция протокола HTTP</a></li>
4
<li><a>Как всё начиналось: эволюция протокола HTTP</a></li>
5
<li><a>HTTP/3: начало</a></li>
5
<li><a>HTTP/3: начало</a></li>
6
<li><a>Использование Google Chrome в качестве HTTP/3 клиента</a></li>
6
<li><a>Использование Google Chrome в качестве HTTP/3 клиента</a></li>
7
<li><a>Использование HTTP/3 с помощью curl</a></li>
7
<li><a>Использование HTTP/3 с помощью curl</a></li>
8
<li><a>Использование quiсhe</a></li>
8
<li><a>Использование quiсhe</a></li>
9
<li><a>Заключение: HTTP/3 уже здесь</a></li>
9
<li><a>Заключение: HTTP/3 уже здесь</a></li>
10
</ul><h2>Яйцо или курица, сервер или браузер: вечный вопрос</h2>
10
</ul><h2>Яйцо или курица, сервер или браузер: вечный вопрос</h2>
11
<p>Практически все инновации в интернете сталкиваются с фундаментальным вопросом: где в первую очередь должна поддерживаться новинка: на стороне сервера или на стороне браузера? В случае с протоколом передачи гипертекста ответ на этот вопрос однозначный: технологию должен поддерживать как сервер, так и клиент. В противном случае протокол не получится протестировать и использовать.</p>
11
<p>Практически все инновации в интернете сталкиваются с фундаментальным вопросом: где в первую очередь должна поддерживаться новинка: на стороне сервера или на стороне браузера? В случае с протоколом передачи гипертекста ответ на этот вопрос однозначный: технологию должен поддерживать как сервер, так и клиент. В противном случае протокол не получится протестировать и использовать.</p>
12
<p>Компания Cloudflare входит в число пионеров новых веб-стандартов. Она участвовала в разработке разных технологий: HTTP/2, TLS 1.3 и ESNI. Cloudflare сотрудничали с другими командами, включая разработчиков браузеров. Работа над HTTP/3 также велась совместно с партнерами, включая команды Google Chrome и Mozilla Firefox.</p>
12
<p>Компания Cloudflare входит в число пионеров новых веб-стандартов. Она участвовала в разработке разных технологий: HTTP/2, TLS 1.3 и ESNI. Cloudflare сотрудничали с другими командами, включая разработчиков браузеров. Работа над HTTP/3 также велась совместно с партнерами, включая команды Google Chrome и Mozilla Firefox.</p>
13
<p>В результате 26 сентября компания Cloudflare объявила о поддержке HTTP/3. Mozilla присоединится к инициативе в ближайшее время. Для рядовых пользователей это значит, что интернет становится быстрее и удобнее.</p>
13
<p>В результате 26 сентября компания Cloudflare объявила о поддержке HTTP/3. Mozilla присоединится к инициативе в ближайшее время. Для рядовых пользователей это значит, что интернет становится быстрее и удобнее.</p>
14
<p>CTO Firefox Эрик Рескорла прокомментировал новость: "Разработка нового сетевого протокола - сложная задача. В течение нескольких лет мы работали с Cloudflare и другими партнёрами по отрасли, чтобы внедрить сначала TLS 1.3, а теперь HTTP/3 поверх QUIC".</p>
14
<p>CTO Firefox Эрик Рескорла прокомментировал новость: "Разработка нового сетевого протокола - сложная задача. В течение нескольких лет мы работали с Cloudflare и другими партнёрами по отрасли, чтобы внедрить сначала TLS 1.3, а теперь HTTP/3 поверх QUIC".</p>
15
<p>Рескорла подчёркивает важный вклад Cloudflare в развитие HTTP/3 - обеспечение серверной поддержки нового протокола на ранних стадиях разработки.</p>
15
<p>Рескорла подчёркивает важный вклад Cloudflare в развитие HTTP/3 - обеспечение серверной поддержки нового протокола на ранних стадиях разработки.</p>
16
<h2>Как всё начиналось: эволюция протокола HTTP</h2>
16
<h2>Как всё начиналось: эволюция протокола HTTP</h2>
17
<p>Чтобы понимать преимущества HTTP/3, необходимо рассмотреть эволюцию протокола HTTP.</p>
17
<p>Чтобы понимать преимущества HTTP/3, необходимо рассмотреть эволюцию протокола HTTP.</p>
18
<p>Начать стоит с 1996 года, когда была опубликована<a>спецификация HTTP 1.0</a>. В нём определяется текстовый формат HTTP, каким мы знаем его сегодня. Для удобства читателей автор оригинальной публикации предлагает притвориться, как будто версии HTTP 0.9 не существовало.</p>
18
<p>Начать стоит с 1996 года, когда была опубликована<a>спецификация HTTP 1.0</a>. В нём определяется текстовый формат HTTP, каким мы знаем его сегодня. Для удобства читателей автор оригинальной публикации предлагает притвориться, как будто версии HTTP 0.9 не существовало.</p>
19
<p>В HTTP 1.0 для каждого запроса и ответа между клиентом и сервером создаётся новое TCP-соединение. Это значит, что обмен данными замедляется, так как перед каждым запросом завершается взаимодействие TCP и TLS.</p>
19
<p>В HTTP 1.0 для каждого запроса и ответа между клиентом и сервером создаётся новое TCP-соединение. Это значит, что обмен данными замедляется, так как перед каждым запросом завершается взаимодействие TCP и TLS.</p>
20
<p>Более того, вместо немедленной отправки данных после соединения TCP использует так называемый "медленный старт". Он необходим, чтобы алгоритм управления перегрузкой определил объём данных, которые могут быть отправлены в любой момент времени без риска получить перегрузку, с которой не справится сеть. Но из-за "медленного старта" TCP не может использовать всю пропускную способность сети.</p>
20
<p>Более того, вместо немедленной отправки данных после соединения TCP использует так называемый "медленный старт". Он необходим, чтобы алгоритм управления перегрузкой определил объём данных, которые могут быть отправлены в любой момент времени без риска получить перегрузку, с которой не справится сеть. Но из-за "медленного старта" TCP не может использовать всю пропускную способность сети.</p>
21
<p>В HTTP 1.1 была предпринята<a>попытка решить эту проблему</a>. Проблема решалась с помощью поддерживающих соединений, которые позволяли клиентам повторно использовать TCP соединения. Это снижало стоимость "медленного старта" и установки соединения для каждого запроса. Но решение не стало панацеей. Множественные запросы теперь могли использовать общее соединение, но они всё равно выполнялись последовательно. Поэтому сервер мог выполнять только один запрос и ответ в конкретный момент времени для каждого соединения.</p>
21
<p>В HTTP 1.1 была предпринята<a>попытка решить эту проблему</a>. Проблема решалась с помощью поддерживающих соединений, которые позволяли клиентам повторно использовать TCP соединения. Это снижало стоимость "медленного старта" и установки соединения для каждого запроса. Но решение не стало панацеей. Множественные запросы теперь могли использовать общее соединение, но они всё равно выполнялись последовательно. Поэтому сервер мог выполнять только один запрос и ответ в конкретный момент времени для каждого соединения.</p>
22
<p>С развитием интернета браузеры столкнулись с дополнительным вызовом. Обозревателям пришлось учиться параллельно получать и рендерить большие объёмы данных, так как веб-страницы использовали больше ресурсов: CSS, JavaScript, изображения и так далее.</p>
22
<p>С развитием интернета браузеры столкнулись с дополнительным вызовом. Обозревателям пришлось учиться параллельно получать и рендерить большие объёмы данных, так как веб-страницы использовали больше ресурсов: CSS, JavaScript, изображения и так далее.</p>
23
<p>HTTP 1.1 позволял клиенту обрабатывать только один запрос в конкретный момент времени. Поэтому для параллельной работы браузеры использовали множество TCP-соединений одновременно. Это сводило на нет идею поддерживающих соединений. То есть разработчики протокола HTTP вернулись в точку отправления.</p>
23
<p>HTTP 1.1 позволял клиенту обрабатывать только один запрос в конкретный момент времени. Поэтому для параллельной работы браузеры использовали множество TCP-соединений одновременно. Это сводило на нет идею поддерживающих соединений. То есть разработчики протокола HTTP вернулись в точку отправления.</p>
24
<p>Наконец спустя более чем 10 лет появились SPDY и<a>HTTP/2</a>. В числе других нововведений были представлены HTTP-потоки. Это абстракция, которая позволяет HTTP выполнять множество запросов через одно TCP-соединение. Это позволяет браузерам повторно использовать TCP-соединения и повышает эффективность работы клиента.</p>
24
<p>Наконец спустя более чем 10 лет появились SPDY и<a>HTTP/2</a>. В числе других нововведений были представлены HTTP-потоки. Это абстракция, которая позволяет HTTP выполнять множество запросов через одно TCP-соединение. Это позволяет браузерам повторно использовать TCP-соединения и повышает эффективность работы клиента.</p>
25
<p>Но и это решение не стало панацеей. HTTP/2 решает старую проблему - неэффективное использование TCP-соединения. Эта версия протокола поддерживает выполнение множества запросов через одно соединение одновременно. Однако все запросы и ответы подвержены потере пакетов из-за перегрузки сети. Проблема сохраняется даже в том случае, если потеря пакетов касается только одного запроса. HTTP/2 умеет разделять запросы и ответы в потоках, но TCP не умеет работать с этой абстракцией.</p>
25
<p>Но и это решение не стало панацеей. HTTP/2 решает старую проблему - неэффективное использование TCP-соединения. Эта версия протокола поддерживает выполнение множества запросов через одно соединение одновременно. Однако все запросы и ответы подвержены потере пакетов из-за перегрузки сети. Проблема сохраняется даже в том случае, если потеря пакетов касается только одного запроса. HTTP/2 умеет разделять запросы и ответы в потоках, но TCP не умеет работать с этой абстракцией.</p>
26
<p>Задача TCP - доставить поток байтов, расположенных в нужном порядке, из одной точки в другую. Когда TCP теряет часть байтов, в потоке данных образуется пробел. TCP отправляет повторный запрос, чтобы восстановить утраченные байты. В это время данные, которые следуют за потерянными байтами, не доставляются в пункт назначения. Эта проблема известна как блокировка заголовка или head-of-line blocking.</p>
26
<p>Задача TCP - доставить поток байтов, расположенных в нужном порядке, из одной точки в другую. Когда TCP теряет часть байтов, в потоке данных образуется пробел. TCP отправляет повторный запрос, чтобы восстановить утраченные байты. В это время данные, которые следуют за потерянными байтами, не доставляются в пункт назначения. Эта проблема известна как блокировка заголовка или head-of-line blocking.</p>
27
<h2>HTTP/3: начало</h2>
27
<h2>HTTP/3: начало</h2>
28
<p>Описанные выше проблемы успешно решает HTTP/3. Вместо TCP новая версия HTTP использует QUIC. Это экспериментальный транспортный протокол,<a>разработанный Google</a>. В QUIC потоки реализованы как объекты первого класса.</p>
28
<p>Описанные выше проблемы успешно решает HTTP/3. Вместо TCP новая версия HTTP использует QUIC. Это экспериментальный транспортный протокол,<a>разработанный Google</a>. В QUIC потоки реализованы как объекты первого класса.</p>
29
<p>Потоки в QUIC используют общие соединения. Поэтому здесь нет проблемы "медленного старта". При этом потоки остаются независимыми, поэтому потеря части пакета не приводит к задержке передачи данных. Это возможно благодаря реализации пакетов QUIC поверх протокола UDP.</p>
29
<p>Потоки в QUIC используют общие соединения. Поэтому здесь нет проблемы "медленного старта". При этом потоки остаются независимыми, поэтому потеря части пакета не приводит к задержке передачи данных. Это возможно благодаря реализации пакетов QUIC поверх протокола UDP.</p>
30
<p>Использование UDP обеспечивает большую гибкость по сравнению с TCP. Например, обновления протокола не привязаны к обновлениям операционной системы как в случае с TCP. С помощью QUIC потоки уровня HTTP реализуются поверх потоков QUIC. Это обеспечивает преимущества HTTP/2 без эффекта head-of-line blocking.</p>
30
<p>Использование UDP обеспечивает большую гибкость по сравнению с TCP. Например, обновления протокола не привязаны к обновлениям операционной системы как в случае с TCP. С помощью QUIC потоки уровня HTTP реализуются поверх потоков QUIC. Это обеспечивает преимущества HTTP/2 без эффекта head-of-line blocking.</p>
31
<p>В QUIC комбинируется трёхстороннее рукопожатие TCP с рукопожатием TLS 1.3. Благодаря этому по умолчанию обеспечивается возможность шифрования и аутентификации. Также этот подход обеспечивает быструю установку соединения. Когда HTTP-сессия требует нового соединения QUIC, задержка передачи данных получается короче, чем при использовании TCP и TLS.</p>
31
<p>В QUIC комбинируется трёхстороннее рукопожатие TCP с рукопожатием TLS 1.3. Благодаря этому по умолчанию обеспечивается возможность шифрования и аутентификации. Также этот подход обеспечивает быструю установку соединения. Когда HTTP-сессия требует нового соединения QUIC, задержка передачи данных получается короче, чем при использовании TCP и TLS.</p>
32
<p>Но почему бы просто не использовать HTTP/2 поверх QUIC вместо создания новой версии HTTP? Ведь HTTP/2 тоже работает с множеством потоков. На практике всё оказалось сложнее.</p>
32
<p>Но почему бы просто не использовать HTTP/2 поверх QUIC вместо создания новой версии HTTP? Ведь HTTP/2 тоже работает с множеством потоков. На практике всё оказалось сложнее.</p>
33
<p>Действительно, некоторые возможности HTTP/2 можно использовать поверх QUIC. Но речь идет только о некоторых, а не обо всех возможностях. Например, возможность применения схемы сжатия заголовков HPAC зависит от порядка доставки HTTP-запросов в конечную точку. QUIC не гарантирует сохранения порядка потоков.</p>
33
<p>Действительно, некоторые возможности HTTP/2 можно использовать поверх QUIC. Но речь идет только о некоторых, а не обо всех возможностях. Например, возможность применения схемы сжатия заголовков HPAC зависит от порядка доставки HTTP-запросов в конечную точку. QUIC не гарантирует сохранения порядка потоков.</p>
34
<p>Эта ситуация потребовала разработки новой схемы сжатия заголовков QPAC. В свою очередь, QPAC требует изменений в протоколе HTTP. Также некоторые возможности HTTP/2, например, управление потоками, уже реализованы в QUIC. Поэтому их удалили из HTTP/3, чтобы не усложнять новую версию протокола.</p>
34
<p>Эта ситуация потребовала разработки новой схемы сжатия заголовков QPAC. В свою очередь, QPAC требует изменений в протоколе HTTP. Также некоторые возможности HTTP/2, например, управление потоками, уже реализованы в QUIC. Поэтому их удалили из HTTP/3, чтобы не усложнять новую версию протокола.</p>
35
<p>Компания Cloudflare реализовала возможность практического использования HTTP/3 и QUIC с помощью quiсhe -<a>опенсорсного решения</a>, написанного на языке программирования Rust. Quiche позволяет использовать HTTP/3 на клиенте и на сервере.</p>
35
<p>Компания Cloudflare реализовала возможность практического использования HTTP/3 и QUIC с помощью quiсhe -<a>опенсорсного решения</a>, написанного на языке программирования Rust. Quiche позволяет использовать HTTP/3 на клиенте и на сервере.</p>
36
<p>На момент выхода оригинальной публикации возможность использования HTTP/3 доступна только части клиентов Cloudflare. Функцию необходимо активировать вручную в панели управления. После этого можно воспользоваться одним из описанных ниже способов, чтобы оценить преимущества HTTP/3.</p>
36
<p>На момент выхода оригинальной публикации возможность использования HTTP/3 доступна только части клиентов Cloudflare. Функцию необходимо активировать вручную в панели управления. После этого можно воспользоваться одним из описанных ниже способов, чтобы оценить преимущества HTTP/3.</p>
37
<h2>Использование Google Chrome в качестве HTTP/3 клиента</h2>
37
<h2>Использование Google Chrome в качестве HTTP/3 клиента</h2>
38
<p>Чтобы получить доступ к сайту через HTTP/3, нужно установить последнюю версию<a>Chrome Canary</a>. Затем нужно<a>запустить обозреватель в командной строке</a>с флагами -- enable-quick и -- quic-version=h3-23.</p>
38
<p>Чтобы получить доступ к сайту через HTTP/3, нужно установить последнюю версию<a>Chrome Canary</a>. Затем нужно<a>запустить обозреватель в командной строке</a>с флагами -- enable-quick и -- quic-version=h3-23.</p>
39
<p>После этого введите URL сайта в адресную строку браузера. Чтобы убедиться, что ресурс загрузился с помощью HTTP/3, используйте вкладку Network в инструментах разработчика Chrome. Возможно, для установки соединения с помощью HTTP/3 придётся несколько раз перезагрузить страницу.</p>
39
<p>После этого введите URL сайта в адресную строку браузера. Чтобы убедиться, что ресурс загрузился с помощью HTTP/3, используйте вкладку Network в инструментах разработчика Chrome. Возможно, для установки соединения с помощью HTTP/3 придётся несколько раз перезагрузить страницу.</p>
40
<p>Обратите внимание, HTTP/3 остаётся экспериментальной функцией, поэтому пока этот протокол в в Google Chrome отображается нак http/2 + quic/99.</p>
40
<p>Обратите внимание, HTTP/3 остаётся экспериментальной функцией, поэтому пока этот протокол в в Google Chrome отображается нак http/2 + quic/99.</p>
41
<h2>Использование HTTP/3 с помощью curl</h2>
41
<h2>Использование HTTP/3 с помощью curl</h2>
42
<p>Утилита командной строки curl также поддерживает HTTP/3. Чтобы воспользоваться возможностью, установите<a>последнюю версию инструмента</a>и включите поддержку новой версии протокола с помощью<a>инструкции</a>.</p>
42
<p>Утилита командной строки curl также поддерживает HTTP/3. Чтобы воспользоваться возможностью, установите<a>последнюю версию инструмента</a>и включите поддержку новой версии протокола с помощью<a>инструкции</a>.</p>
43
<p>Если вы пользуетесь macOS, можно установить последнюю версию curl с поддержкой HTTP/3 из Homebrew:</p>
43
<p>Если вы пользуетесь macOS, можно установить последнюю версию curl с поддержкой HTTP/3 из Homebrew:</p>
44
<p>Чтобы использовать протокол HTTP/3, нужно добавлять флаг --http3 к командам curl.</p>
44
<p>Чтобы использовать протокол HTTP/3, нужно добавлять флаг --http3 к командам curl.</p>
45
<h2>Использование quiсhe</h2>
45
<h2>Использование quiсhe</h2>
46
<p>Компания Cloudflare разработа ещё одно решение:<a>HTTP/3-клиент, работающий поверх quiche</a>. Чтобы воспользоваться возможностью, клонируйте репозиторий.</p>
46
<p>Компания Cloudflare разработа ещё одно решение:<a>HTTP/3-клиент, работающий поверх quiche</a>. Чтобы воспользоваться возможностью, клонируйте репозиторий.</p>
47
<p>Запустите сборку. Обратите внимание, у вас должны быть установлены Rust и Cargo.</p>
47
<p>Запустите сборку. Обратите внимание, у вас должны быть установлены Rust и Cargo.</p>
48
<p>Теперь выполните HTTP/3 запрос.</p>
48
<p>Теперь выполните HTTP/3 запрос.</p>
49
<h2>Заключение: HTTP/3 уже здесь</h2>
49
<h2>Заключение: HTTP/3 уже здесь</h2>
50
<p>Cloudflare, Mozilla, Google и другие представители индустрии работают над протоколом HTTP/3 и QUIC. В ближайшее время можно ожидать широкого внедрения новой версии протокола. Конечному пользователю новая версия HTTP обеспечит более быстрый и безопасный веб.</p>
50
<p>Cloudflare, Mozilla, Google и другие представители индустрии работают над протоколом HTTP/3 и QUIC. В ближайшее время можно ожидать широкого внедрения новой версии протокола. Конечному пользователю новая версия HTTP обеспечит более быстрый и безопасный веб.</p>
51
<p><em>Адаптированный перевод статьи<a>HTTP/3: the past, the present, and the future</a>by Rustam Lalkaka and Alessandro Ghedini. Мнение администрации "Хекслета" может не совпадать с мнением авторов оригинальной публикации.</em></p>
51
<p><em>Адаптированный перевод статьи<a>HTTP/3: the past, the present, and the future</a>by Rustam Lalkaka and Alessandro Ghedini. Мнение администрации "Хекслета" может не совпадать с мнением авторов оригинальной публикации.</em></p>