В кодовую базу nginx добавлен модуль для поддержки HTTP/2
17 сентября 2015 года
В состав основных исходных текстов nginx принят модуль с реализацией протокола HTTP/2, соответствующего спецификациям RFC 7240 и RFC 7241 (расширение HPACK для сжатия заголовков). Реализация HTTP/2 представлена в виде модуля ngx_http_v2 (включается через "configure --with-http_v2_module"), который заменил собой модуль ngx_http_spdy. Поддержка протокола SPDY, методы которого легли в основу HTTP/2, удалена из состава nginx.
Основные особенности ( PDF) HTTP/2.0:
- Применение бинарного протокола, оперирующего передачей бинарных кадров. Каждый кадр имеет заголовок с информацией о типе, размере, опциях и идентификаторе потока. Кадры с типом DATA используются для передачи данных, HEADERS - HTTP-заголовков, RST_STREAM - для досрочного прерывания отправки данных;
- Мультиплексирование и распараллеливание потоков в рамках одного TCP-соединения. Пакеты разных потоков смешиваются и, в отличие от конвейерной передачи HTTP/1.1, не ожидают окончания отправки запроса. Поддержка эффективной двунаправленной передачи данных. Возможность мультиплексирования при обращении к разным хостам, что позволяет дополнительно ускорить одновременную загрузку web-контента с разных сайтов (в SPDY мультиплексирование поддерживается только для одного хоста);
- Возможность установки приоритетов и зависимостей для потоков, что позволяет выделить наиболее важные потоки, которые нужно выполнить в первую очередь, а также определить зависимость одного потока от другого;
- Сжатие HTTP-заголовков. В том числе поддерживается устранение дубликатов заголовков и Cookie, повторяющихся для серии запросов к одному сайту. Допускается определение отдельных заголовков не подлежащих сжатию;
- Низкая чувствительность к задержкам;
- Средства для согласования протокола между клиентом и сервером, позволяющие выбрать HTTP/1.1, HTTP/2.0 и другие протоколы: сервер предоставляет список поддерживаемых протоколов, которые может выбрать клиент. Для шифрованных соединений параметры TLS согласовываются при помощи протокола APLN, при котором клиент сообщает список поддерживаемых опций, а сервер выбирает наиболее оптимальный для себя вариант;
- Обеспечение высокого уровня совместимости с HTTP/1.1: сохранены заголовки, схема URI, коды состояния и методы (GET, POST и т.п.). Обеспечена возможность создания прокси для доступа клиентов HTTP/1.1 к серверам HTTP/2.0;
- Возможность установки шифрованных (HTTPS) и нешифрованных соединений (HTTP). Шифрование осуществляется с использованием TLS 1.2 или более новой версии. Несмотря на то, что спецификация допускает создание нешифрованных соединений, разработчики Firefox и Chrome намерены обеспечить работу HTTP/2.0 только поверх TLS;
- Поддержка технологии Server push для передачи данных от сервера к клиенту (например, когда сервер считает, что после определённого запроса обязательно будут затребованы другие данные, он может отправить эти данные не дожидаясь фактического запроса);
- Поддержка HTTP/2.0 уже реализована в браузерах Firefox 36+, Chrome (требуется сборка с "--enable-spdy4") и IE 11. Серверные реализации пока ограничиваются OpenLiteSpeed, H2O, nghttp2 и некоторыми библиотеками на высокоуровневых языках.
Дополнение: Вышел nginx 1.9.5 с экспериментальной поддержкой HTTP/2.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.