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

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 serverProtocols 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)

admin

Recent Posts

Настройка Mercurial по HTTPS

Иногда mercurial, при скачивании и комитах ругается на https. Особенно на самоподписанные сертификаты. Чтобы заработал…

4 недели ago

Компиляция libvirt в Ubuntu

Компиляция libvirt Подробнее

4 недели ago

Ошибка libvirt permission denied: решение

Если возникает ошибка libvirt destroy lxc permission denied , при попытке остановить контейнер: _x000D_# virsh…

4 недели ago

Настройка редиректа в NGINX

Файлы с примерами редиректа для nginx Подробнее

4 недели ago

Включение gzip в NGINX

Как включить gzip сжатие в Nginx ? Подробнее

4 недели ago

Удаление postinst-скрипта в Linux

Иногда возникает ситуация, когда криво настроенные пакеты не устанавливаются в системе. У меня это произошло…

4 недели ago