17 августа рабочая группа QUIC (IETF) опубликовала документ, в котором описывается новая версия протокола HTTP/3. Его заменит QUIC, первоначально разработанный Google.
QUIC – это протокол транспортного уровня (TL), разработанный на основе UDP. Протокол был разработан Google в 2012 году. В нем управление перегрузкой пользовательского пространства осуществляется через протокол пользовательских датаграмм (UDP).
HTTP – вчера, сегодня, завтра
Как известно, интернет работает поверх стека TCP/IP. В стеке TCP/IP HTTP находится на верхнем прикладном уровне. Следовательно, для инициирования каждого HTTP-запроса должно быть инициировано TCP-соединение.
HTTP не имеет ничего общего с базовыми аппаратными структурами или носителями. Это делает возможным улучшение и обновление спецификации HTTP с увеличением пропускной способности.
В HTTP/1 было много отдельных подключений для разных ресурсов. Традиционный интернет использовал TCP-соединения, которые требовали механизма трехстороннего подтверждения. TCP оценивает загруженность сети и скорости, которые могут быть согласованы обеими сторонами. Из-за этого соединения не используют всю пропускную способность сети.
HTTP/1.1 ввел keep-alive, чтобы смягчить этот сценарий, сохраняя и не разрывая соединение после каждого запроса. Но мультиплексирование было недоступно, и запросы приходилось выполнять серийно.
В HTTP/2 были выполнены улучшения на уровне приложений, что позволило добавить мультиплексирование. HTTP/2 обеспечивает более быстрый и безопасный веб-интерфейс.
HTTP/2 использует мультиплексирование для туннелирования нескольких запросов через одно и то же TCP-соединение, но потери пакетов в TCP препятствуют росту производительности. Это связано с упорядоченным характером TCP. Он видит только поток данных между двумя источниками. Внутри может быть несколько ресурсов, за порядком доставки которых следит TCP. В случае сбоя, отправка пакетов идет по новой. Эта проблема – Head of Line Blocking – приводит к излишней задержке данных, что встречается в перегруженных сложных сетях.
Новая спецификация обещает еще более быстрый, лучший и безопасный веб-интерфейс.
QUIC
Согласно документам инженерного совета интернета IETF, третья версия HTTP больше не будет использовать TCP. QUIC заменит TCP и попытается устранить ограничения, вызванные протоколом. По сути QUIC использует комбинацию TCP + TLS + SPDY.
QUIC применяет одно и то же соединение для разных потоков, поэтому для создания новых не требуется дополнительных подтверждений и медленных запусков. Потоки QUIC доставляются независимо, поэтому потеря пакетов, влияющая на один поток, не влияет на другие. Это возможно благодаря тому, что пакеты QUIC инкапсулируются поверх UDP.
QUIC также сочетает в себе типичное трехэтапное установление связи TCP с подтверждением связи TLS 1.3. Объединение этих шагов означает, что шифрование и аутентификация предоставляются по умолчанию, а соединение устанавливается быстрее.
В будущем потоки HTTP будут отображаться на основе QUIC для доставки данных, и HTTP/2 сможет раскрыть все возможности своей спецификации.
HTTP/3
Хотя HTTP/2 может работать поверх QUIC, он не гарантирует порядка обслуживания запросов, в отличие от TCP. Предыдущее сжатие заголовка HTTP (HPACK) во многом зависит от упорядочивания в TCP. Это делает невозможным использование HTTP/2 поверх QUIC. HTTP/3 будет намного проще с точки зрения функциональности, поскольку многие из его функций были перемещены на уровень QUIC.
HTTP/3 использует ту же семантику, что и HTTP/1.1 и HTTP/2. Он поддерживает те же операции, как GET и POST, и коды ответа, например 200 или 404. Но HTTP/3 использует другой транспортный протокол, который знает эту семантику и может восстанавливаться из пакета.
28 октября 2018 года Марк Ноттингем, председатель рабочих групп IETF HTTP и QUIC, сделал официальный запрос на переименование HTTP-over-QUIC в HTTP/3. Цель запроса: «четко идентифицировать HTTP/3 как еще одну привязку семантики HTTP к протоколу и передать его разработку рабочей группой QUIC после завершения и публикации проекта». Предложение Ноттингема было принято другими членами IETF несколько дней спустя, в ноябре 2018 г.
Поддержка HTTP/3 была добавлена в Chrome в сентябре 2019 года, а затем в конечном итоге достигла стабильных сборок, но отключена флагом. По состоянию на 2020 год HTTP/3 отключен по умолчанию в стабильных версиях Chrome и Firefox. Экспериментальная поддержка HTTP/3 была добавлена в Safari Technology Preview 8 в апреле 2020 г.
Возможные проблемы
Выход окончательных спецификаций нового протокола планируется рабочей группой на декабрь 2020 года. Однако, несмотря на все преимущества нового протокола, могут возникнуть сложности.
QUIC по умолчанию шифрует весь трафик. В работе Роберта Лычева и Самуэля Джеро 2015 года, описывается ряд проблем безопасности, как снижение производительности из-за атак повторного воспроизведения конфигурации сервера.
Кроме того, по состоянию на 18 августа всего 4,6% веб сайтов поддерживают QUIC. HTTP/2, утвержденный и опубликованный 5 лет назад поддерживают только 47,6%. Это дает основания предположить, что даже когда стандарт будет принят, на его внедрение уйдет еще много времени.