• Время чтения ~2 мин
  • 27.11.2023

Немного вводной информации о HTTP/3

Конечно же, важным отличием HTTP/3 является то, что он работает на новом транспортном протоколе QUIC. QUIC предназначен для интенсивного использования мобильных устройств в Интернете, когда люди носят с собой смартфоны, которые постоянно переключаются из одной сети в другую в течение дня. Когда были разработаны первые интернет-протоколы, этого еще не было: устройства были менее портативными и нечасто переключались между сетями.

Т.е. QUIC поможет исправить некоторые из самых больших недостатков HTTP/2:

  • Разработка решения проблемы низкой производительности при переключении смартфона с Wi-Fi на сотовые данные (например, при выходе из дома или офиса)

  • Уменьшение последствий потери пакетов - когда один пакет информации не доходит до места назначения, он больше не блокирует все потоки информации (проблема, известная как «блокировка начала строки»).

Кстати, протокол QUIC был разработан Google еще в 2012 году и принят Инженерной группой Интернета (IETF) — независимой от поставщиков организацией по стандартизации — когда они начали создавать новый стандарт HTTP/3. Посоветовавшись с экспертами со всего мира, IETF внесла множество изменений для разработки собственной версии QUIC.

Включить поддержку HTTP/3 в Nginx

Поддержка протоколов QUIC и HTTP/3 доступна начиная с версии 1.25.0. Также, начиная с 1.25.0, поддержка доступна в готовых пакетах для Linux.

Поддержка QUIC и HTTP/3 экспериментальная, поэтому возможно всё.

Проверяем версию nginx:

nginx -v

Убеждаемся в правильной версии:

$ nginx version: nginx/1.25.3

Для сборки nginx рекомендуется библиотека SSL с поддержкой QUIC, например BoringSSL, LibreSSL или QuicTLS. Иначе, при использовании библиотеки OpenSSL, будет использоваться OpenSSL compatibility layer, в котором не поддерживается early data.

Итак, имеем стандартный виртуальный хост nginx с HTTP/2:

server
{
    listen 443 ssl;
    # включаем поддержку http2
    http2 on;  
 
    ssl_protocols TLSv1.2;
    ssl_certificate /path_certs/fullchain.pem;
    ssl_certificate_key path_certs/privkey.pem;
    ...
}

Теперь дополним его директивами для включения HTTP/3:

server
{
    # для лучшей совместимости рекомендуется использовать один порт для quic и https
    # указываем протокол quic и параметр reuseport для правильной работы с несколькими рабочими процессами
    listen 443 quic reuseport;    
    listen 443 ssl;
    # включаем поддержку http2
    http2 on;    
    # включаем поддержку http3
    http3 on;
    # разрешаем GSO
    quic_gso on;
    # разрешаем проверку адреса
    quic_retry on;
    # Для работы QUIC требуется версия протокола TLSv1.3.
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_certificate /path_certs/fullchain.pem;
    ssl_certificate_key path_certs/privkey.pem;
    # для перенаправления браузеров в quic-порт
    add_header Alt-Svc 'h3=":443";max=86400';
    ...
}

В принципе все, если возникнуть проблемы с подключением, убедитесь:

  • что nginx собран с правильной SSL-библиотекой и версией

  • что клиент действительно поддерживает работу с QUIC

После внесения правок и перезагрузки веб-сервера, можете проверить через сервис поддержку HTTP/3, либо сейчас сразу можете проверить сайт ниже в поле.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297