🕸 Как работает протокол HTTP/2: основные принципы и преимущества в сравнении с HTTP/1.1

Протокол HTTP/2 стал значительным шагом в развитии веб-технологий: oн заменяет устаревший HTTP/1.1, устраняя его главные недостатки – низкую скорость загрузки и избыточность соединений. В этой статье мы разберем ключевые принципы работы HTTP/2, включая бинарное кадрирование, мультиплексирование, приоритизацию потоков, серверный пуш и сжатие заголовков.

Протокол HTTP/1.1 много лет был основой работы веба. Однако со временем веб-приложения стали объемнее, сложнее и требовательнее к производительности, что привело к необходимости усовершенствования протокола. Решением проблемы стал HTTP/2 – он включает несколько важных улучшений, которые помогают страницам загружаться быстрее и повышают производительность современных веб-приложений. Давайте рассмотрим эти технологии подробнее.

Слой бинарного кадрирования

В HTTP/1.1 данные передавались в текстовом формате, что делало обмен медленным и малоэффективным. В HTTP/2 появился слой бинарного кадрирования: передача данных происходит в двоичном виде вместо текста, и это позволяет многократно повысить скорость обработки запросов.

HTTP/2 vs HTTP/1.1

Бинарное кадрирование работает так:

  • HTTP/2 разбивает сообщения на фреймы (кадры) – небольшие блоки данных.
  • Каждый фрейм состоит из заголовка, который содержит информацию о типе фрейма, его размере и идентификаторе потока, и полезной нагрузки – данных запроса или ответа (тело сообщения, настройки соединения и т. п.)
  • Идентификатор позволяет клиенту и серверу правильно собрать запрос или ответ.
  • Все фреймы передаются по одному TCP-соединению, при этом они могут идти вперемешку, не мешая друг другу (об этом ниже).
Обмен данными по протоколу HTTP/2

Бинарное кадрирование работает быстрее, чем передача данных в текстовом формате, поскольку:

  • Двоичные данные компактнее, чем текст.
  • Несколько потоков данных могут передаваться одновременно по одному соединению.
  • Если один ресурс загружается медленно, это не задерживает остальные.

Пример – загрузка веб-страницы. Представьте, что браузер загружает страницу, содержащую картинки, стили и скрипты.

  • В HTTP/1.1 загрузка каждого из этих ресурсов требовала отдельного соединения, что замедляло процесс.
  • В HTTP/2 все ресурсы разбиваются на фреймы и передаются по одному соединению одновременно – загрузка происходит намного быстрее.
Статья по теме

Мультиплексирование

Мультиплексирование позволяет отправлять несколько запросов и получать несколько ответов одновременно по одному соединению. Это возможно благодаря уже упомянутому бинарному кадрированию:

  • Данные запроса и ответа разбиваются на фреймы.
  • Фреймы из разных запросов перемешиваются при передаче.
  • Каждый фрейм содержит идентификатор потока, чтобы сервер и клиент могли правильно собрать исходные сообщения.
Мультиплексирование в HTTP/2

Мультиплексирование ускоряет передачу данных благодаря:

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

Пример – загрузка страницы со множеством изображений, скриптов и стилей:

  • В HTTP/1.1 загрузка шла последовательно, если соединений не хватало — часть ресурсов ждала своей очереди.
  • В HTTP/2 все ресурсы отправляются и принимаются одновременно в виде фреймов, что значительно ускоряет загрузку страницы.

Приоритизация потоков

Приоритизация потоков позволяет разработчикам назначать уровень важности для различных запросов. Это помогает сначала загружать самые критичные ресурсы, ускоряя работу веб-приложений.

Как работает приоритизация потоков:

  • Каждому потоку (запросу или ответу) можно назначить приоритет — число от 1 до 256 (чем выше число, тем выше приоритет).
  • Один поток может зависеть от другого (например, сначала загружается HTML, затем стили CSS).
  • Сервер использует эту информацию, чтобы эффективнее распределять ресурсы и пропускную способность.

Как приоритизация оптимизирует загрузку и опыт:

  • Самое важное загружается в первую очередь – например, HTML и CSS получают высокий приоритет, а фоновые изображения или аналитические скрипты загружаются позже.
  • Улучшается пользовательский опыт – критичный контент появляется быстрее, делая сайт более отзывчивым.

Пример – на видеостриминговой платформе важно, чтобы видео загружалось первым, а второстепенные элементы (метаданные, миниатюры, комментарии и т. п.) получали меньший приоритет. Это обеспечивает плавное воспроизведение видео без задержек.

Серверный пуш

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

Пуш работает так:

  • Клиент запрашивает HTML-страницу.
  • Сервер предсказывает, какие дополнительные файлы понадобятся (например, CSS, JS).
  • Вместе с HTML сервер сразу отправляет эти ресурсы.
  • Клиент получает их без дополнительных запросов, что сокращает задержки.
Серверный пуш позволяет сократить количество дополнительных запросов

Как серверный пуш ускоряет загрузку:

  • Меньше задержек – клиенту не нужно сначала получить HTML, проанализировать его и только потом запрашивать стили и скрипты.
  • Меньше сетевых «хождений по кругу» – нужные файлы загружаются сразу, а не в ходе нескольких дополнительных обменов сообщениями.

Пример допустим, браузер запрашивает index.html:

  • В HTTP/1.1 он сначала загружает HTML, анализирует его и только потом запрашивает CSS и JavaScript.
  • В HTTP/2 сервер сам отправляет HTML вместе со связанными CSS и JS-файлами одним пакетом, ускоряя загрузку.

Сжатие заголовков с помощью HPACK

В HTTP/1.1 заголовки передавались полностью при каждом запросе, даже если они повторялись, что приводило к лишним затратам трафика и снижению скорости. HTTP/2 решает эту проблему с помощью HPACK – специального алгоритма сжатия заголовков, который уменьшает объем передаваемых данных.

Как работает сжатие:

  • HTTP/2 хранит заголовки в динамической таблице, запоминая ранее отправленные значения.
  • Если заголовок повторяется, передается только его ссылка на запись в таблице, а не полный текст.
  • Полностью передаются только новые или измененные заголовки.
HPACK эффективно сжимает заголовки повторных запросов

Как HPACK ускоряет HTTP/2:

  • Сжатие снимает проблему избыточности данных – объем трафика снижается, а взаимодействие между клиентом и сервером ускоряется.
  • API работают намного быстрее, особенно если клиент часто отправляет похожие запросы (например, с одинаковыми токенами авторизации).

Пример – предположим, что веб-приложение делает много API-запросов с одинаковыми заголовками (например, Authorization: Bearer TOKEN):

  • В HTTP/1.1 этот заголовок пересылался каждый раз целиком.
  • В HTTP/2 с HPACK передается только ссылка на уже сохраненный заголовок, что ускоряет передачу и снижает нагрузку на сеть.
💻 Библиотека программиста
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

В заключение

HTTP/2 улучшает взаимодействие между браузерами и серверами, сокращая время загрузки страниц и снижая сетевые задержки. Внедрение этого протокола стало важным этапом в развитии интернета, обеспечив пользователям более комфортный и быстрый доступ к веб-контенту. Следующим этапом стал HTTP/3 – он основан на протоколе QUIC, пока еще не лишен недостатков и поддерживается не так широко, как HTTP/2. Мы обсудим его в отдельной статье.


ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

suvorovsda
13 февраля 2022

🌐 Почему данные в интернете не идут по самому короткому пути или как на самом деле работает CDN?

Из этой статьи узнаете, как выглядит интернет изнутри, какие существуют топ...
Библиотека программиста
21 января 2018

Компьютерные сети от А до Я: классификация, стандарты и уровни

Компьютерные сети непросты в изучении, ведь технологий и протоколов много, ...