HTTP/3 (06.2022)

Третья версия протокола передачи гипертекста HTTP.

  • С июня 2022 года находился в стадии предлагаемого стандарта. HTTP/3 основан на QUIC — экспериментальном сетевом протоколе транспортного уровня (поверх UDP), разработанном в 2012 году компанией Google.
  • Был принят IETF как рекомендованный стандарт в июне 2022 года.

Первоначальное название — HTTP-over-QUIC. Главное отличие от предыдущих в — он использует новый транспортный протокол и передаёт контент быстрее.

Поддержка HTTP/3 была добавлена в Chrome (сборка Canary) в сентябре 2019 года, и была включена по умолчанию в апреле 2020 года. Firefox поддерживает HTTP/3 с апреля 2021. Экспериментальная поддержка HTTP/3 была добавлена в Safari Technology Preview 8 апреля 2020 года а потом в Safari 14, но всё ещё выключена по умолчанию.

🚀 Что нового:

  • Транспортный протокол: Использует QUIC, который работает поверх UDP, в отличие от HTTP/2, который использует TCP.
  • Решена проблема блокировки пакетов (Head-of-Line-Blockierung): QUIC устраняет проблему блокировки пакетов, которая возникает, когда потеря одного пакета может заблокировать весь поток данных. Вместо этого в HTTP/3 могут быть заблокированы только отдельные потоки, не затрагивая остальные.
  • Быстрый хендшейк: QUIC интегрирует TLS-шифрование в процесс установления соединения, что позволяет сократить время на установку соединения (1-RTT) или даже достичь нулевого времени (0-RTT).
  • Безопасность: Имеет встроенную поддержку TLS, что обеспечивает более полную и надежную защиту данных.
  • Миграция соединения: Позволяет сохранять активное соединение при смене IP-адреса или сетевого интерфейса, например при переключении между Wi-Fi и мобильным интернетом.

HTTP/2 (05.2015)

Чем был плох HTTP 1.1?

HTTP 1.1 позволяет обрабатывать лишь один поступивший запрос на одно TCP-соединение, поэтому браузеру приходится устанавливать несколько соединений, чтобы обрабатывать одновременно несколько запросов.

🚀 Что нового:

  • Мультиплексированные потоки. Пересылаемая через HTTP/2 в обе стороны последовательность текстовых фреймов, которыми обмениваются между собой клиент и сервер, называется “потоком”. В ранних версиях HTTP можно было транслировать только по одному потоку за раз, с небольшой задержкой между разными потоками. Передавать таким способом большие объёмы медиа-контента было слишком неэффективно и ресурсозатратно. Для решение этой проблемы в HTTP/2 применяется новый бинарный слой фреймов.
  • Отправка данных по инициативе сервера (Server Push). Эта возможность позволяет серверу отправлять клиенту дополнительную кэшируемую информацию, которую тот не запрашивал, но которая может понадобиться при будущих запросах. Например, если клиент запрашивает ресурс Х, который ссылается на ресурс Y, то сервер может передать Y вместе с Х, не дожидаясь от клиента дополнительного запроса.
  • Приоритезация потоков. HTTP/2 позволяет клиенту отдавать предпочтения конкретным потокам данных. Хотя сервер и не обязан следовать подобным клиентским инструкциям, тем не менее этот механизм помогает серверу оптимизировать распределение сетевых ресурсов согласно требованиям конечных пользователей.
  • Сжатие заголовков с сохранением состояния. Чтобы произвести на пользователей наилучшее впечатление, современные веб-сайты должны быть богаты контентом и графикой. HTTP — это протокол без сохранения состояния, то есть каждый клиентский запрос должен содержать как можно больше информации, необходимой серверу для выполнения соответствующей операции. В результате потоки данных содержат многочисленные повторяющиеся фреймы, потому что сервер не должен хранить информацию из предыдущих клиентских запросов.

HTTP/2 создавался с учётом повышения эффективности клиент-серверного обмена данными, что позволяет бизнесменам увеличить охват своих сегментов рынка, а пользователям — быстрее получить доступ к качественному контенту. Помимо прочего, сегодня веб ситуативен как никогда ранее.

HTTP/1.1 (01.1997)

HTTP/1.1 — это протокол передачи данных, который использует текстовый формат для обмена информацией между клиентом и сервером. Он ввел ключевые возможности, такие как keep-alive для поддержания постоянного TCP-соединения для нескольких запросов, что сокращает задержки, и поддержку прокси-серверов.

keep-alive

HTTP 1.1 ввел такое понятие как виртуальные хосты. С точки зрения реализации в протоколе HTTP появилась одна небольшая деталь. Кроме request line стал обязательным еще и заголовок, который называется host. Он определяет, какой именно домен должен быть возвращен с этого IP адреса. Источник

🚀 Что нового:

  • Текстовый формат: Запросы и ответы передаются в виде простого текста, что делает протокол легко читаемым и отлаживаемым.
  • «Keep-alive»: По умолчанию соединение не закрывается после каждого запроса. Это позволяет повторно использовать одно и то же TCP-соединение для нескольких запросов, что снижает нагрузку на сервер и сокращает время ожидания.
  • Управление потоком: Управление потоком осуществляется на основе базового TCP-соединения, что требует отдельного механизма управления для каждого соединения.
  • Совместимость: Широко поддерживается старой инфраструктурой и сторонними API, что делает его популярным выбором для проектов, где высокая производительность не является критическим фактором.
  • Применимость: Прост в изучении и отладке, подходит для простых REST API и других приложений, где не требуется высокой параллельной обработки данных.

HTTP/1.0 (05.1996)

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

🚀 Что нового:

  • HTTP/1.0 ввел заголовки, статусные коды и методы (POST, HEAD), в то время как HTTP/0.9 был гораздо более простым: поддерживал только метод GET, не имел заголовков и позволял передавать только текстовое содержимое

HTTP/0.9 (1991)

HTTP/0.9 (однострочный протокол) был чрезвычайно прост

🚀 Особенности:

  • Запросы состояли из одной строки и начинались с единственно возможного метода GET, за которым следовал путь к ресурсу
  • Полный URL не включался, поскольку после подключения к серверу протокол, сервер и порт не требовались.