The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В кодовую базу nginx добавлен модуль для поддержки HTTP/2

17.09.2015 21:36

В состав основных исходных текстов 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.

  1. Главная ссылка к новости (http://mailman.nginx.org/piper...)
  2. OpenNews: Выпуск http-сервера nginx 1.9.0
  3. OpenNews: Релиз http-сервера nginx 1.8.0
  4. OpenNews: Для nginx подготовлен балансировщик TCP-соединений
  5. OpenNews: HTTP/2.0 получил статус предложенного стандарта
  6. OpenNews: Для http-сервера nginx представлен модуль с поддержкой протокола SPDY
Лицензия: CC-BY
Тип: К сведению
Короткая ссылка: https://opennet.ru/42980-http
Ключевые слова: http, nginx
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (29) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Есюки (?), 22:16, 17/09/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    не в курсе, подскажите в бесплатной версии все это будет доступно?
     
     
  • 2.5, Аноним (-), 23:00, 17/09/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    причем тут платная? первая ссылка в тексте
     
     
  • 3.12, Аноним (-), 08:36, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Он наверно имел ввиду всёвключеноизкаробки
     
  • 2.6, Барак Обама (?), 23:42, 17/09/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Мы уже используем в продакшене опенсорц патч для http2 в nginx,
     

  • 1.2, Igy (?), 22:17, 17/09/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Шикарно! Ускорение работы сайтов из каробки!
     
  • 1.4, th3m3 (ok), 22:48, 17/09/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не прошло и полгода.
     
  • 1.9, Какаянахренразница (ok), 05:18, 18/09/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хочу. Как это бэкпортировать?
     
     
  • 2.16, eRIC (ok), 12:10, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +5 +/
    22.09.2015 будет очередной релиз 1.9.5, тогда можете смело играться :)
     
     
  • 3.18, Какаянахренразница (ok), 13:59, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > 22.09.2015 будет очередной релиз 1.9.5, тогда можете смело играться :)

    Благодарствую за ценные сведения.

     
  • 2.23, Sylvia (ok), 20:55, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    http://nginx.org/patches/http2/
    если невтерпеж )
     
     
  • 3.33, Анончег (?), 17:00, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    спасибо, потестировал!
     
     
  • 4.34, Аноним (-), 23:31, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > спасибо, потестировал!

    И как, много багов нашел?

     

  • 1.11, Джо (?), 08:09, 18/09/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно было бы посмотреть есть ли реальный плюс от этого. Яндекс тестировал в свое время SPDY и не заметил каких-либо улучшений: http://habrahabr.ru/company/yandex/blog/222951/ Если заметных улучшений не будет, то этот HTTP/2 просто усложнение и увеличение различного рода векторов атаки на сервер (ну или на клиент).
     
     
  • 2.13, Аноним (-), 09:21, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Судя по описанию они не стали отказываться от костылей HTTP/1.1: шардинг, склейка большого числа css/js/img в блобы, поэтому и не увидели больших преимуществ. Чтобы увидеть преимущества http2 надо отказаться от этих костылей, задействовать server push.
    Зацените, например, разницу скорости загрузки страницы со 180 картинками по http2 vs http/1.1, особенно если высокая задержка: https://http2.golang.org/gophertiles
     
     
  • 3.19, Аноним (-), 15:54, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > склейка большого числа css/js/img в блобы

    Оптимизацию теперь называют костылем, однако. Сжатие тоже костыль наверное? Подкрутить ядро поди тоже костыль?

     
     
  • 4.20, Аноним (-), 15:56, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> склейка большого числа css/js/img в блобы
    > Оптимизацию теперь называют костылем, однако. Сжатие тоже костыль наверное? Подкрутить
    > ядро поди тоже костыль?

    Зафигачили индексы в СУБД - еще один костыль.

     
     
  • 5.21, Аналитик (?), 16:38, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >>> склейка большого числа css/js/img в блобы
    >> Оптимизацию теперь называют костылем, однако. Сжатие тоже костыль наверное? Подкрутить
    >> ядро поди тоже костыль?
    > Зафигачили индексы в СУБД - еще один костыль.

    Установить любой софт не глядя, тоже костыль.

     
  • 4.22, Имя (?), 20:14, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ок. Поменяли один файл из 100, браузер качает склееную простыню из 100 файлов заново, вместо того, чтобы быстро загрузить один изменившийся. Это не оптимизация — это костыль для обходя проблемы с закачкой большого числа файлов в HTTP/1.1. В http2 такой проблемы нет.
     
     
  • 5.25, rshadow (ok), 23:07, 18/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Все правильно. И картинками проще управлять раздельными. И js с css на мелкие файлы логически разбивать, не заморачиваясь со сборкой. Все это несомненный плюс.

    А вот сделать из текстового протокола бинарный, это уже плюс сомнительный.

     
     
  • 6.27, Аноним (-), 04:37, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ощущение что вы css/js копи пастом собираете, проблемы то нет.
     
     
  • 7.38, Аноним (-), 23:48, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Ощущение что вы css/js копи пастом собираете, проблемы то нет.

    Не, вот знаете, если протокол диктует представление контента - это таки хвост виляет собакой, а не что-нибудь еще.

     
  • 6.29, Аноним (-), 12:34, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Трафик http/1.1 всё равно gzip'ом жмётся почти всегда.
     
  • 6.31, Аналитик (?), 13:10, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Все правильно. И картинками проще управлять раздельными. И js с css на
    > мелкие файлы логически разбивать, не заморачиваясь со сборкой. Все это несомненный
    > плюс.
    > А вот сделать из текстового протокола бинарный, это уже плюс сомнительный.

    Даешь обфускацию с DRM js/css,

     
     
  • 7.35, Аноним (-), 23:33, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Даешь обфускацию с DRM js/css,

    Так фигня вопрос - сделать шифрование или сжатие на JS вообще как два байта переслать. А уж с помощью WS можно произвольный протокол запустить поверх. Хотя при сильном желании можно и поверх HTTP.

     
  • 6.37, Аноним (-), 23:47, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > А вот сделать из текстового протокола бинарный, это уже плюс сомнительный.

    Ну да, жыпег передаваемый в ответе на GET - такой из себя весь текстовый. Да и gzip-encoding ты врядли на глаз декодировать сможешь.

     
  • 5.28, Аноним (-), 04:39, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Ок. Поменяли один файл из 100, браузер качает склееную простыню из 100
    > файлов заново, вместо того, чтобы быстро загрузить один изменившийся. Это не
    > оптимизация — это костыль для обходя проблемы с закачкой большого числа
    > файлов в HTTP/1.1. В http2 такой проблемы нет.

    Это не проблема. Хотя если вы меняете css/js 7 раз в день то да, вам просто необходим http2

     
     
  • 6.36, Аноним (-), 23:45, 19/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Это не проблема.

    Вообще-то это проблема. Если сделать сайт "как логично" а не "как технические ограничения HTTP 1.1 диктуют" - он будет очень медленно грузиться на соединениях с большим RTT. Конечно, есть пайплайнинг. Но в целом HTTP 1.1 обладает рядом бестолковостей, которых у HTTP 2 нет.

    > то да, вам просто необходим http2

    Должен же был прийти кто-то и избавить сайтостроителей от адовых костылестроений. Логично что это оказался кто-то типа гугля, который выкусывает по полной. Вы знаете, когда надо изгибать контент под интимные особенности протокола - это таки недостаток протокола прежде всего. Хотя с сжатием заголовков они имхо несколько перемудрили.

     
     
  • 7.41, Джо (?), 11:09, 23/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Должен же был прийти кто-то и избавить сайтостроителей от адовых костылестроений.

    Костыли HTTP1.1 понятны и в принципе ничего сложного в них нет. Тут главное чтобы HTTP2.0 не добавит своих проблем и геморроя, сложностей с разработкой и отладкой, а также проблем с безопасностью.

     

  • 1.17, абвгдейка (ok), 12:22, 18/09/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    nginx 2.0 - теперь и http/2.0 :)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру