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.1for a http server
Protocols h2c http/1.1
Итог
Протокол HTTP/2 уже значительно оптимизирован, по сравнению с HTTP 1.1, так что простое внедрение новой спецификации способно улучшить производительность веб-сервисов. А отключение дополнительных ухищрений, которые использовались для ускорения HTTP 1.1 поможет воспользоваться всеми преимуществами HTTP/2.
Еще по теме HTTP протокол
Коды ответа сервера. Самые распространенные коды (коды состояния HTTP)