2016-07-04 3 views
1

Я экспериментирую с переходом на http/2. Я создал веб-сайт Wordpress и настроил NGINX для его использования с помощью http/2 (используя SSL/TLS).HTTP2 и NGINX - когда я буду использовать директиву keepalive?

Мое понимание http/2 заключается в том, что по умолчанию оно использует одно соединение для передачи нескольких файлов - вместо того, чтобы открывать новые соединения и повторять SSL-подтверждения для каждого файла.

Для достижения аналогичного эффекта для http/1.x NGINX предлагает директиву keepalive.

Так ли использование директивы keepalive имеет смысл при использовании только http/2? Проверка моих файлов конфигурации с помощью «nginx -t» не приводит к ошибкам при включении. Но имеет ли это какой-то эффект? Бенчмаркинг не показал никакой разницы.

ответ

4

Вы не понимаете, как это работает.

Работать с живыми между запросами.

Когда вы загружаете веб-страницу, она загружает HTML-страницу и обнаруживает, что ей нужны еще 20 ресурсов (файлы CSS, файлы javascript, изображения, шрифты и т. Д.).

В HTTP/1.1 вы можете запросить только один из этих ресурсов сразу, так что веб-браузер запускает еще 5 подключений (всего 6) и запрашивает 6 из этих 20 ресурсов. Затем он запрашивает оставшиеся 14 ресурсов, поскольку эти соединения освобождаются. Да, сторонники поддержки помогают между этими запросами, но это не единственное его использование, о чем мы поговорим ниже. Накладные расходы на настройку этих соединений небольшие, но заметные, и существует задержка в том, что они могут запросить только 6 ресурсов этих 20 за раз. Вот почему HTTP/1.1 неэффективен для сегодняшнего использования Интернета, где типичная веб-страница состоит из 100 ресурсов.

В соответствии с HTTP/2 мы можем скрыть все 20 запросов одновременно по одному и тому же соединению, чтобы получить хорошие выигрыши. И да, с технической точки зрения, вы не пользуетесь преимуществами keep-alives между ними, поскольку соединение все еще используется до тех пор, пока все они не прибудут, хотя по-прежнему получат небольшую задержку между первым запросом HTML и другим. 20.

Однако после этого начальный загрузка, скорее всего, будет больше запросов. Либо потому, что вы просматриваете сайт, либо потому, что вы взаимодействуете со страницей, и это делает дополнительные XHR-вызовы api. Тем, кто будет получать поддержку, будут доступны ли HTTP/1.1 или HTTP/2.

Таким образом, HTTP/2 не отменяет необходимость сохранения прав. Это отрицает необходимость в нескольких соединениях (между прочим).

Таким образом, ответ заключается в том, чтобы всегда использовать keep-alives, если у вас нет веских оснований. И какой тип бенчмаркинга вы делаете, чтобы сказать, что это не имеет значения?

+0

Спасибо за указание на это различие. Беда в том, что настройка «keep-alive», похоже, не имеет никакого отношения к тестированию (бенчмаркинг было неправильным словом, извините). При использовании 'curl -I -http1.1' с keep-alive ответ включает _Connection: keep-alive_. Но использование 'curl -I -http2' не показывает такой записи. – michbona

+2

В соответствии с HTTP/2 сохраняются права по умолчанию, а HTTP/2 не использует заголовок соединения (см. Раздел 8.1.2.2 спецификации HTTP/2 здесь: https://http2.github.io/http2-spec/# HttpHeaders). –

+0

Если по умолчанию в HTTP/2 сохраняются права доступа, мне не нужно ничего устанавливать в конфигурации веб-сервера (кроме включения HTTP/2)? Или это специфично для каждого веб-сервера? И как я могу узнать, включен ли «живой» или «выключен»? – michbona