HTTP. Что такое протокол HTTP/2

16.02.2018

HTTP протокол (англ. «протокол передачи гипертекста») — сетевой протокол верхнего уровня для передачи гипертекстовых и произвольных данных в интернете.

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

В HTTP 1.1 браузеры используют множественные подключения к серверу для загрузки веб-страницы, причем, количество таких соединений ограниченно. Из-за ограничения на количество одновременных подключений в HTTP/1.1 загрузка страниц, содержащих большое количество «тяжёлого» контента, осуществляется медленно. Причем скорость загрузки веб-страниц по мере роста пропускной способности канала связи практически не меняется. Неэффективная структура протокола HTTP 1.1 препятствует этому.

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

схема работы протоколов

Главные отличия HTTP/2 от HTTP

Бинарность

В отличие от текстового HTTP 1.1, HTTP/2 — бинарный. Поэтому протокол более эффективен при парсинге, более компактный при передаче, подвержен меньшему количеству ошибок.

Соединения

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

Приоритеты потоков

Клиент может задавать серверу приоритеты — какого типа ресурсы для него более важны, чем другие

Push-отправка данных со стороны сервера

Cache Push, позволяют с упреждением обновлять или аннулировать кэш на клиенте. При этом сервер способен определять ресурсы, которые могут понадобиться клиенту, которые он на самом деле не запрашивал.

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

В HTTP/2 заголовки передаются в сжатом виде. Благодаря этому уменьшается количество информации, которой обмениваются между собой сервер и браузер. Вместо алгоритмов gzip/deflate используется HPACK. Это снижает уязвимость к атакам типа BREACH.

Безопасность

Протокол HTTP/2 не требует шифрования канала. Тем не менее, все современные браузеры работают с HTTP/2 только вместе с TLS.

Обратная совместимость

HTTP/2 обратно совместим с HTTP/1.1. Поэтому вы в принципе можете не предпринимать никаких действий: работе вашего сервиса ничего не угрожает.

Как включить HTTP/2?

Nginx

Нормальная реализация HTTP2 появилась в версии nginx 1.9.5. Собственно поэтому и понадобилось обновиться до этой версии. Ну а подключить поддержку этого протокола еще легче. Правим конфиг nginx, добавляем http2 в listen: listen 433 ssl http2;

Apache

В Apache HTTP/2 поддерживается только в версиях 2.4.17 и выше. Если у вас установлена более ранняя версия, выполните обновление и подключите модуль mod_http2. После этого добавьте в конфигурационный файл следующие строки:

# for a https server
Protocols h2 http/1.1

for a http server

Protocols h2c http/1.1

Итог

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

Еще по теме HTTP протокол

Что такое протокол HTTP?

Коды ответа HTTP сервера

Коды ответа сервера. Самые распространенные коды (коды состояния HTTP)