В состав основных исходных текстов nginx принят (http://mailman.nginx.org/pipermail/nginx-devel/2015-Septembe... модуль с реализацией протокола HTTP/2, соответствующего спецификациям RFC 7240 (http://www.rfc-editor.org/rfc/rfc7540.txt) и RFC 7241 (http://www.rfc-editor.org/rfc/rfc7541.txt) (расширение HPACK для сжатия заголовков). Реализация HTTP/2 представлена в виде модуля ngx_http_v2 (включается через "configure --with-http_v2_module"), который заменил собой модуль ngx_http_spdy. Поддержка протокола SPDY, методы которого легли в основу HTTP/2, удалена из состава nginx.
Основные особенности (http://daniel.haxx.se/http2/) (PDF (https://github.com/vlet/http2-explained/blob/master/http2.ru... 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 (https://ru.wikipedia.org/wiki/%D0%A2%D0%... для передачи данных от сервера к клиенту (например, когда сервер считает, что после определённого запроса обязательно будут затребованы другие данные, он может отправить эти данные не дожидаясь фактического запроса);
- Поддержка HTTP/2.0 уже реализована в браузерах Firefox 36+, Chrome (требуется сборка с "--enable-spdy4") и IE 11. Серверные реализации пока ограничиваются (https://github.com/http2/http2-spec/wiki/Implementations)&nb... (http://open.litespeedtech.com/), H2O (https://github.com/kazuho/h2o), nghttp2 (https://nghttp2.org/) и некоторыми библиотеками на высокоуровневых языках.
URL: http://mailman.nginx.org/pipermail/nginx-devel/2015-Septembe...
Новость: https://www.opennet.ru/opennews/art.shtml?num=42980