Мы используем cookie, чтобы сайт был лучше для вас.
Внимание
У Вас отключена поддержка Cookie в браузере. Возможно некорректное отображение сайта!

Что такое HTTP/2 и как он помогает ускорять сайты

HTTP (HyperText Transfer Protocol — протокол передачи гипертекста) — сетевой протокол прикладного уровня, определяющий, как контент передаётся по сети. HTTP/2 — его последняя версия на момент выхода этой публикации.

История создания HTTP/2

Описание первой версии протокола, HTTP/0.9, было опубликовано ещё в 1991 году. В 1996-м появился HTTP/1.0. А предшественник HTTP/2 — HTTP/1.1 — вышел в 1999-м. После этого долго не было никаких обновлений.

Альтернативу HTTP/1.1 разработали в 2009 году. Это был протокол SPDY. Уже тогда у разработчиков было понимание, что существующая версия не обеспечивает достаточной скорости передачи данных. Целью инженеров было модифицировать способы приёма и отправки запросов и за счёт этого ускорить работу интернета. Именно этот протокол и лёг в основу HTTP/2.

SPDY действительно ускорял веб-приложения, поэтому набирал популярность и составлял серьёзную конкуренцию HTTP. В итоге разработчики решили, что в сети не должно быть двух конкурирующих протоколов, и объединили два этих стандарта. За создание нового протокола взялась рабочая группа HyperText Transfer Protocol из Инженерного совета Интернета. Так в 2015 году появился HTTP/2.

Основной целью новой версии было ускорение передачи данных. Вместе с этим разработчики хотели избавиться от «узких мест» HTTP/1.1, сделать его более производительным и безопасным.

Проблемы и ограничения HTTP/1.1

Как мы уже сказали, эта версия протокола вышла в 1999 году. HTTP/2 появился только через 16 лет. За это время в интернете многое изменилось, у сайтов появились новые элементы: скрипты JаvaScript, анимация, стили CSS и много чего ещё.

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

Что такое HTTP/2 и как он помогает ускорять сайты
TCP-соединения для передачи данных по HTTP/1.1

Это создавало колоссальную нагрузку на сеть.

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

Кроме того, так как HTTP/1.1 существовал уже много лет, в какой-то момент он перестал отвечать требованиям безопасности. Злоумышленники нашли в нём лазейки, позволяющие воровать данные пользователей.

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

Возможности HTTP/2: как он ускоряет сайты и улучшает передачу данных

Чтобы устранить все проблемы, которые были у HTTP/1.1, разработчики внесли в новую версию ряд важных изменений. Мы не будем рассматривать все отличия, поговорим лишь о тех, которые непосредственно влияют на скорость.

Бинарный протокол

Предыдущие версии HTTP передавали данные в текстовом формате. Это было удобно для пользователей. Но с технической точки зрения текстовые сообщения обрабатываются медленнее, чем бинарные.

Что такое HTTP/2 и как он помогает ускорять сайты
Сравнение передачи данных в HTTP/1.1 и в HTTP/2

В HTTP/2 сообщения состоят из фреймов — бинарных частей данных. Их совокупность называется потоком (stream). Каждый фрейм содержит в себе уникальный идентификатор потока — данные о том, к какому потоку он относится.

Что такое HTTP/2 и как он помогает ускорять сайты
Представление фреймов и потоков в HTTP/2

Существует несколько типов фреймов. Например, для передачи метаданных (размера сообщения, типа данных, адресов отправителя и получателя и так далее) используется фрейм HEADERS, для основного сообщения — фрейм DATA.

Есть фрейм RST_STREAM — он используется для прерывания потока. Клиент передаёт его серверу, чтобы сообщить, что этот поток ему больше не нужен. За счёт этого передача данных останавливается, но соединение остаётся открытым. Для сравнения: в HTTP/1.1 единственным способом прекратить передачу данных был разрыв соединения, а потом его приходилось открывать по новой.

Такой принцип работы бинарного протокола повышает качество соединения:

  • Снижается вероятность ошибки.
  • Уменьшаются накладные расходы при парсинге данных.
  • Снижается нагрузка на сеть, ресурсы используются более эффективно.
  • Бинарные команды компактнее текстовых, что снижает время на их обработку и выполнение.
  • Следовательно, уменьшаются задержки при передаче данных.
  • Более простая обработка сообщений означает большую устойчивость к сбоям.
  • Снижается риск хакерских атак, особенно таких, как HTTP Response Splitting. В предыдущих версиях возможности для таких атак открывали текстовые данные в заголовках.

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

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

Это одно из главных отличий HTTP/2 от предыдущих версий. Именно благодаря этой особенности удалось увеличить скорость передачи данных.

В HTTP/1.1. для быстрой передачи разных типов данных создавалось несколько параллельных TCP-соединений. В новой версии все данные могут передаваться с помощью одного соединения.

Что такое HTTP/2 и как он помогает ускорять сайты
TCP-соединение для передачи данных по HTTP/2

Бинарный характер протокола даёт возможность параллельно загружать разную информацию без задержек, не блокируя ни один из ответов или запросов.

Потребность устанавливать только одно соединение сильно сокращает время на доставку контента. Дело в том, что для установки каждого TCP-соединения требуется «тройное рукопожатие»:

  1. Отправитель посылает запрос на установку соединения — сообщение SYN и порядковый номер переданного байта.
  2. Получатель в ответ посылает сообщение SYN, подтверждает получение данных сообщением ACK и отправляет номер байта, который должен быть получен следующим.
  3. Отправитель тоже подтверждает, что получил информацию, и посылает номер следующего ожидаемого байта.

Только после этих трёх шагов соединение считается установленным.

Что такое HTTP/2 и как он помогает ускорять сайты
Схема установки TCP-соединения

На все эти шаги уходит время. Когда соединение нужно установить только один раз, время на лишние «рукопожатия» не тратится, а следовательно, увеличивается скорость.

Кроме того, в HTTP/2 отпадает необходимость в доменном шардинге.

Чтобы обойти ограничение на количество TCP-соединений в HTTP/1.1, разработчики выносили часть контента на поддомены. Данные с поддоменов загружались параллельно, и это помогало увеличить скорость.

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

Сжатие заголовков

Чтобы сервер выполнил запрос наиболее точно, его заголовок должен содержать как можно больше уточняющих метаданных. А HTTP — это протокол без сохранения состояния. Это значит, что сервер не может хранить информацию из предыдущих запросов, и в результате клиенту приходится каждый раз посылать большое количество повторяющихся данных в заголовках.

Объём таких заголовков — около 500–800 байт служебных данных, а иногда и больше килобайта, если используются ещё файлы cookie.

Это делает всё сообщение в целом более объёмным. А чем больше размер данных, тем дольше они будут передаваться и тем больше будет задержка.

В HTTP/2 эту ситуацию исправило сжатие заголовков с помощью формата HPACK. Он кодирует и сжимает заголовки с помощью алгоритма Хаффмана. Вместе с этим клиент и сервер поддерживают общую, постоянно обновляемую таблицу заголовков. Это позволяет не передавать повторяющиеся заголовки, а восстанавливать их с помощью таблицы.

Что такое HTTP/2 и как он помогает ускорять сайты
Схема сжатия заголовков в HTTP/2 с помощью HPACK

Данных передаётся меньше, а значит, запросы и ответы доходят быстрее.

Функция Server Push

Эта функция позволяет серверу передавать данные ещё до того, как клиент их запросил. Например, браузер загружает страницу и отправляет запрос на HTML. Но вместе с HTML для отрисовки страницы будут нужны ещё и CSS. Сервер не ждёт второго запроса на CSS и отправляет эти данные сразу вместе с запрошенными.

Что такое HTTP/2 и как он помогает ускорять сайты
Схема работы функции Server Push

«Угаданные» сервером данные отправляются с помощью фрейма PUSH_PROMISE. Так клиент сможет понять, что это информация, которую он не запрашивал, и определить, нужна ли она ему. Если данные окажутся не нужны (например, потому что они уже есть в кеше), браузер может послать в ответ фрейм RST_STREAM (мы говорили о нём выше) и остановить передачу лишнего.

Это помогает избежать дублирования информации.

Таким образом, функция сокращает количество запросов к серверу, уменьшает нагрузку на него и ускоряет работу веб-приложений.

Приоритизация отдачи контента

Данные в HTTP/2 по умолчанию передаются асинхронно, в произвольной последовательности. Однако эту последовательность можно задать. Вы можете определить, какие данные сервер должен отдавать в первую очередь, а какие можно отправить позже.

Протокол позволяет определить вес каждого потока — его значимость в плане приоритетности передачи. Вместе с этим HTTP/2 даёт возможность установить зависимость одного потока от другого.

Вес определяется в виде целого числа от 1 до 256. Чем больше число, тем более приоритетным будет поток.

Зависимость одного потока от другого указывается с помощью специального идентификатора, который отсылает к другому, «родительскому» потоку.

Например, если поток X зависит от потока Y, это значит, что Y — родительский поток, и он должен быть полностью обработан в первую очередь, а уже после него будет обрабатываться поток X.

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

Допустим, потоки X и Y не зависят друг от друга, но при этом X весит 10, а Y — 15. Давайте посчитаем, сколько процентов ресурсов будет выделено каждому:

  1. X + Y = 10 + 15 = 25
  2. Ресурсы, выделяемые на X = 10 / 25 = 40%
  3. Ресурсы, выделяемые на Y = 15 / 25 = 60%

Получается, на обработку потока X будет выделено 40% ресурсов, а на обработку Y — 60%.

Давайте рассмотрим, как это работает, на более развёрнутом примере.

Что такое HTTP/2 и как он помогает ускорять сайты
Схема приоритизации отдачи контента в HTTP/2

Что означает эта схема:

  • Поток D должен быть обработан в первую очередь.
  • Потоки E и C должны быть обработаны после D. На каждый должно быть выделено по 50% ресурсов.
  • Потоки A и B будут обработаны после C. На A будет выделено 75% ресурсов, на B — 25%.

Какие возможности даёт приоритизация:

  • Вы можете определить, какой контент будет загружаться в первую очередь.
  • Первый приоритет можно отдать самым важным для пользователей элементам сайта.
  • Юзеры получат все необходимые для взаимодействия с сайтом элементы раньше, чем он загрузится полностью.
  • Это создаст впечатление более быстрой загрузки и улучшит клиентский опыт.

Как HTTP/2 ускоряет сайты на практике

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

Например, тест CCS-Tricks показал, что сайт с HTTP/2 загружается почти в 2 раза быстрее, чем ресурс с HTTP/1.1.

Для тестирования компания смоделировала реальный одностраничный сайт на WordPress. Для измерения скорости загрузки они использовали инструмент GTMetrix.

В результате с использованием HTTP/1.1 страница сайта загружалась 1,9 с.

Что такое HTTP/2 и как он помогает ускорять сайты

А на HTTP/2 при тех же условиях время загрузки составило 1 с.

Что такое HTTP/2 и как он помогает ускорять сайты

При этом, как видим, с использованием HTTP/2 уменьшилось количество запросов.

Испытания компании SolarWinds демонстрируют не столь впечатляющие результаты. Их тестирование показывает, что производительность HTTP/2 выше, чем у предшественника, всего на 13%.

Так же, как и в предыдущем исследовании, компания замеряла скорость сайта на WordPress. Для измерений они использовали Pingdom. Скорость проверялась 4 раза через каждые 30 минут. Из получившихся результатов они вывели средний показатель. И вот что получилось.

Сайт с HTTP/1.1 загружался 534 мс.

Что такое HTTP/2 и как он помогает ускорять сайты

А тот же сайт на HTTP/2 загрузился за 464 мс.

Что такое HTTP/2 и как он помогает ускорять сайты

Размер страницы; Среднее время загрузки

Так или иначе, HTTP/2 на данный момент является наиболее оптимизированной и быстрой версией основного протокола передачи данных в интернете.

Подведём итоги

  1. HTTP/2 — вторая крупная версия HTTP — сетевого протокола прикладного уровня, который определяет, как контент передаётся по интернету.
  2. HTTP/2 был выпущен в 2015 году на замену HTTP/1.1. Основной целью новой версии было ускорить передачу контента.
  3. Главная особенность HTTP/2, за счёт которой удалось увеличить скорость доставки, — мультиплексирование потоков. Оно позволяет создавать одно соединение для любого типа данных и передавать информацию параллельно.
  4. Помимо этого, HTTP/2 передаёт контент быстрее за счёт сжатия заголовков, приоритизации потоков и функции Server Push. А ещё, в отличие от HTTP/1.1, это бинарный протокол, что тоже делает его более производительным.
  5. Проведенные тесты показывают, что использование HTTP/2 дает существенное преимущество в скорости загрузки сайта по сравнению с HTTP/1.1.

CDN от EdgeЦентр поддерживает протокол HTTP/2. При этом наша сеть может доставлять контент по HTTP/2, даже если ваши серверы его не поддерживают.

Особенности EdgeЦентр CDN:

  • Быстрая. Среднее время отклика по миру — меньше 30 мс.
  • Мощная. Суммарная ёмкость сети — больше 75 Тбит/с.
  • Глобальная. 90+ точек присутствия на 5 континентах.
  • Выгодная. Удобные тарифы и единые цены по всему миру.
Подпишитесь на полезную рассылку

Выгодные предложения и важные новости раз в месяц. Без спама

Нажимая кнопку «Подписаться», я даю согласие на получение рекламно-информационной рассылки согласно Политике