Что такое HTTP/3 и зачем он нужен?

При изучении интернета и стоящих за ним технологий вы можете встретить термин HTTP. HTTP или Hypertext Transfer Protocol (протокол передачи гипертекста) является столпом всемирной сети, выступая универсальным протоколом для передачи текстовых данных. Вы без сомнений его использовали, поскольку сайт, на котором вы узнали об HTTP, определенно использует HTTP.

Краткая история HTTP

Первой версией HTTP была HTTP/0.9. Ее разработал Тим Бернс-Ли в 1989 году, правда свое имя HTTP/0.9 она получила лишь в 1991. В настоящее время эта версия очень ограничена и способна выполнять лишь базовые задачи. Она не может вернуть ничего кроме веб-страницы и не поддерживает куки, а также другие современные возможности. 

JavaMentor
JavaMentor

В 1996 году вышел HTTP/1.0, в котором появилась возможность осуществлять POST-запросы и отправлять уже не только веб-страницы. Однако до современных масштабов было еще далеко. 

В 1997 году вышел HTTP/1.1, позднее претерпевший две ревизии, одну в 1999 году и вторую в 2007. В нем появилось уже много мощных возможностей таких как куки и устойчивые соединения. 

Наконец, в 2015 году появился HTTP/2, который существенно повысил производительность мировой сети за счет возможности отправки событий сервером и единовременного совершения множества запросов. HTTP/2 по-прежнему находится в тренде и используется лишь немногим менее, чем половиной всех веб-сайтов.

HTTP/3: новейшая версия HTTP

HTTP/3 или HTTP-over-QUIC существенно изменяет принцип работы HTTP. Традиционно HTTP работает по TCP (протокол управления передачей данных). Однако TCP был разработан аж в 1974 году еще на заре интернета. Когда он только появился, его авторы не могли предсказать перспективы роста мировой паутины.

Получается, что в настоящее время TCP уже ограничивает возможности HTTP в плане скорости и безопасности. Новая же версия HTTP/3 призвана эти ограничения устранить. Вместо TCP в HTTP/3 используется новейший разработанный Google протокол под названием QUIC. Он привносит в HTTP много новшеств.

Возможности

Ускоренное мультиплексирование запросов

До появления HTTP/2 браузеры могли отправлять на сервер только один запрос за раз. Это существенно замедляло загрузку сайта, так как браузер единовременно загружал по одному ресурсу, например CSS или JavaScript. В HTTP/2 появилась возможность загружать за раз большее число ресурсов, но TCP под это приспособлен недостаточно. 

В случае провала одного запроса TCP вынуждает браузер повторять все остальные. В HTTP/3 эта проблема решается переходом с TCP на QUIC. При использовании HTTP/3 браузеру в случае провала запроса потребуется повторить только его, что повышает скорость работы и надежность.

Ускоренное шифрование

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

Реализация

Стандартизация

На момент написания статьи HTTP/3 и QUIC еще не стандартизированы. Над этим вопросом трудится рабочая группа IETF. Версия QUIC для HTTP/3 несколько изменена и вместо шифрования Google использует TLS, но на предполагаемые преимущества это не влияет. 

Поддержка браузеров

На данный момент HTTP/3 по умолчанию поддерживает Chrome, так как является детищем корпорации Google, которая и занимается созданием протокола QUIC. Firefox также поддерживает HTTP/3 в версиях 88+ . Safari 14 тоже работает с HTTP/3, но здесь для активации поддержки потребуется отметить соответствующий флажок.

Поддержка браузерами HTTP/3 (источник: Can I Use)

Бессерверность и поддержка CDN

Пока что HTTP/3 поддерживается только некоторыми серверами, но при этом их число растет. Помимо Google, одной из первых поддержку новейшей версии протокола заявила платформа CloudFlare, в связи с чем их бессерверные функции и CDN являются HTTP/3-совместимыми.

Кроме того, к числу совместимых относятся также Google Cloud и Fastly. К сожалению, на данный момент такой поддержки нет в Microsoft Azure CDN и AWS CloudFront. Если вы хотите попробовать этот протокол, то удобную настройку кэширования CDN через HTTP/3 перед вашим сервером можно реализовать с помощью QUIC.Cloud, хотя эта возможность пока экспериментальна. 

Заключение

HTTP/3 по-прежнему является экспериментальным обновлением HTTP и скорее всего еще претерпит изменения. Однако более половины пользователей уже поддерживают HTTP/3 в его текущем виде. Если вы готовы к обновлению своей реализации, то это может привести к неплохому приросту производительности. 

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи AsyncBanana: What is HTTP/3, and Why Does it Matter?

Предыдущая статья4 типичные ошибки программиста, которые видны лишь с позиции руководителя
Следующая статьяУтверждения, применяемые при импортировании в JavaScript