Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола HTTP/3.0 и опубликовал связанные с ним спецификации под идентификаторами RFC 9114 (протокол) и RFC 9204 (технология сжатие заголовков QPACK для HTTP/3). Спецификация HTTP/3.0 получила статус «Предложенного стандарта», после чего начнётся работа по приданию RFC статуса чернового стандарта (Draft Standard), фактически означающего полную стабилизацию протокола и учёт всех высказанных замечаний. Одновременно опубликованы обновлённые варианты спецификаций для протоколов HTTP/1.1 (RFC 9112) и HTTP/2.0 (RFC 9113), а также документы, определяющие семантику HTTP-запросов (RFC 9110) и HTTP-заголовки управления кэшированием (RFC 9111).
Протоколът HTTP/3 определя използването на протокола QUIC (Quick UDP Internet Connections) като транспорт за HTTP/2. QUIC представлява надстройка над протокола UDP, която поддържа мултиплексиране на няколко връзки и осигурява методи за криптиране, еквивалентни на TLS/SSL. Протоколът беше създаден през 2013 година от Google като алтернатива на комбинацията TCP+TLS за Web, решаваща проблемите с дългото време за установяване и договаряне на връзки в TCP и елиминираща закъсненията при загуба на пакети по време на предаване на данни.

В настоящее время поддержка QUIC и HTTP/3.0 уже реализована во всех популярных web-браузерах (в Chrome, Firefox и Edge поддержка HTTP/3 включена по умолчанию, а в Safari требует включения настройки «Advanced > Experimental Features > HTTP/3»). На серверной стороне реализации HTTP/3 доступны для nginx (в отдельной ветке и в форме отдельного модуля), Caddy, IIS и LiteSpeed. Поддержку HTTP/3 также обеспечивает сеть доставки контента Cloudflare.
Основни характеристики на QUIC:
- Висока сигурност, подобна на TLS (по същество QUIC предоставя възможност за използване на TLS върху UDP);
- Контрол на целостта на потока, предотвратяващ загуба на пакети;
- Възможността веднага да се установи връзка (0-RTT, приблизително в 75% от случаите данните могат да се изпращат веднага след изпращане на пакета за установяване на връзката) и да се осигурят минимални закъснения между изпращането на запитването и получаването на отговора (RTT, Round Trip Time);

- Използване при повторна предаване на пакета на друг номер на последователност, което позволява да се избегне неяснота при определяне на получените пакети и да се премахнат таймаутите;
- Загубата на пакет влияе само на доставката на свързания с него поток и не спира доставката на данни в паралелно предавани потоци през текущото свързване;
- Средства за корекция на грешки, минимизиращи закъсненията от повторната предавка на загубени пакети. Използване на специални кодове за корекция на грешки на ниво пакет, за да се намалят ситуациите, изискващи повторна предавка на данни от загубения пакет.
- Границите на криптографските блокове са изравнени с границите на QUIC пакетите, което намалява влиянието на загубите на пакети върху декодирането на съдържанието на следващите пакети;
- Липса на проблеми с блокирането на опашката на TCP;
- Подкрепа за идентификатор на свързване, който позволява да се намали времето за повторно установяване на свързването за мобилни клиенти;
- Възможност за свързване на разширени механизми за контрол на натоварването на свързването;
- Използване на техника за прогнозиране на пропускната способност във всяка посока, за да се осигури оптимална интензивност на изпращане на пакети, предотвратявайки спадането в състояние на натоварване, при което се наблюдават загуби на пакети;
- Забележимо увеличение на производителността и пропускателната способност в сравнение с TCP. За видеосервизи като YouTube, прилагането на QUIC показа намаление на операциите на повторно буфериране при гледане на видео с 30%.
Из изменений в спецификации HTTP/1.1 можно отметить запрет на обособленное использование символа возврата каретки (CR) вне тела с содержимым, т.е. в элементах протокола символ CR может применяться только вместе с символом перевода строки (CRLF). Алгоритм компоновки chunked-запросов доработан для упрощения разделения прикреплённых полей и секции с заголовками. Добавлены рекомендации по обработке неоднозначного содержимого для блокирования атак класса «HTTP Request Smuggling», позволяющих вклиниваться в содержимое запросов других пользователей в потоке между фронтэндом и бэкендом.
В обновлението на спецификацията HTTP/2.0 е ясно определена поддръжката на TLS 1.3. Прехвърлена е в категорията на остарелите схемата на определяне на приоритети и свързаните с нея полета в заглавията. Обявен е за остарял механизмът за обновяване на съединението с HTTP/1.1, който не е получил разпространение. Съкращават се изискванията за проверка на имената на полета и стойностите. Предложени са за използване някои преди това запазени типове кадри и параметри. По-точно са определени забранените заглавни полета, свързани със съединението.
Източник: opennet.ru

