Ответ 1
В целом, наибольшим непосредственным преимуществом HTTP/2 является увеличение скорости, обеспечиваемое мультиплексированием для подключений через браузер, которые часто сдерживаются высокой задержкой (т.е. медленной скоростью передачи туда и обратно). Это также уменьшает необходимость (и стоимость) нескольких соединений, что позволяет обойти аналогичные преимущества производительности в HTTP/1.1.
Для внутренних соединений (например, между веб-сервером, действующим в качестве обратного прокси-сервера и внутренними серверами приложений) задержка, как правило, очень, очень мала, поэтому преимущества HTTP/2 в скорости незначительны. Кроме того, каждый сервер приложений, как правило, уже будет отдельным соединением, поэтому опять-таки никакой выгоды здесь нет.
Таким образом, вы получите большую часть выигрыша в производительности от поддержки HTTP/2 на самом краю. Это довольно распространенная установка - аналогично тому, как HTTPS часто завершается на обратном прокси-сервере/балансировщике нагрузки, а не проходит весь путь до конца.
Однако есть потенциальные преимущества для поддержки HTTP/2 на всем пути. Например, это может позволить серверу протолкнуть весь путь из приложения. Также потенциальные выгоды от уменьшенного размера пакета для этого последнего прыжка из-за двоичной природы HTTP/2 и сжатия заголовка. Хотя, как и задержка, пропускная способность, как правило, менее важна для внутренних соединений, поэтому важность этого спорна. Наконец, некоторые утверждают, что обратный прокси-сервер работает меньше при подключении соединения HTTP/2 к соединению HTTP/2, чем при соединении HTTP/1.1, поскольку нет необходимости преобразовывать один протокол в другой, хотя я скептически отношусь к этому, даже если это заметно, поскольку они являются отдельными соединениями (если только они не действуют как проход TCP через прокси). Итак, для меня главная причина сквозного HTTP/2 состоит в том, чтобы разрешить сквозной серверный Push, но даже это, вероятно, лучше обрабатывать с помощью заголовков HTTP-ссылок и 103-ранних подсказок из-за сложностей в управлении push-сообщениями между несколькими соединениями.,
На данный момент, хотя серверы все еще добавляют поддержку, а использование проталкивания серверов низкое (и все еще экспериментируют, чтобы определить лучшие практики), я бы рекомендовал использовать только HTTP/2 в конечной точке. На момент написания этой статьи Nginx также не поддерживает HTTP/2 для соединений ProxyPass (хотя Apache делает это) и не планирует добавлять это, и они представляют интересный вопрос о том, может ли одно соединение HTTP/2 создавать медлительность. (выделение мое):
Планируется ли поддержка HTTP/2 прокси на ближайшее будущее?
Короткий ответ:
Нет, планов нет.
Длинный ответ:
Практически нет смысла его реализовывать, поскольку основное преимущество HTTP/2 заключается в том, что он позволяет мультиплексировать множество запросов в одном соединении, тем самым [почти] снимая ограничение на количество simalteneous-запросов - и при разговоре с ним такого ограничения нет ваши собственные бэкэнды. Более того, при использовании HTTP/2 для бэкэндов дела могут ухудшиться из-за использования одного соединения TCP вместо нескольких.
С другой стороны, реализация протокола HTTP/2 и мультиплексирования запросов в одном соединении в вышестоящем модуле потребует серьезных изменений в вышестоящем модуле.
Из-за вышеизложенного не планируется реализовывать поддержку HTTP/2 в вышестоящем модуле, по крайней мере, в обозримом будущем. Если вы все еще думаете, что общение с бэкэндами через HTTP/2 является чем-то необходимым - не стесняйтесь предоставлять патчи.
Наконец, следует также отметить, что, хотя браузеры требуют HTTPS для HTTP/2 (h2), большинство серверов не поддерживают и могут поддерживать этот последний переход по HTTP (h2c). Таким образом, не будет необходимости в сквозном шифровании, если оно отсутствует в части узла (как это часто бывает). Хотя, в зависимости от того, где внутренний сервер находится по отношению к внешнему серверу, использование HTTPS даже для этого соединения, возможно, следует учитывать, если трафик будет передаваться через незащищенную сеть (например, CDN на исходный сервер через Интернет).