Комментарии 8
Потрачу свой комментарий к статье студента. Позвольте вас познакомпить, что для HTTP есть такая штука, как проксирование запросов. Прямо изначально так задумывалось. Можно поставить на фронтэнде какой-нибудь nginx или что-то иное, который будет поддерживать все необходимые фишки, типа HTTP 2.0, работу с сертификатами для доменов и прочее. А на бекэнде ваша задача просто предоставить для этого сервера нормальный ответ этому серверу по любому поддерживаемому протоколу.
Оно в суперпозиции из-за того, что нафиг не нужно. Обычно перед nodejs стоит nginx который терминирует ssl и дальше все работает по обычному http.
А как эта архитектура разрешает проблему Head-of-line blocking между nginx и web-приложением?
и дальше все работает по обычному http
А ещё потому, что по "необычному" (HTTP/2) nginx в upstream не умеет. HTTP/2 поддерживается только для клиентской стороны (браузеров). Разрабы nginx считают, что большого выигрыша от HTTP/2 в upstream нет.
А вот разрабы apache'а считают, что их сервер должен "мочь в HTTP/2" с обеих сторон, и в apache такая возможность есть:
RewriteRule "^/(.*)$" "h2c://localhost:3000/$1" [P]
Это значит, что если проксирование идёт через nginx, то про Server Push в своих node-приложениях можно забыть. Реализовывать его придётся на уровне nginx, через его конфиги. Но, в общем-то, не такая уж это и нужная вещь - Server Push.
Он и не обязан все уметь. Я лишь привел вам самый популярный вариант построения приложения. Никто не мешает убрать nginx и взять nodejs, golang, php (даже так можно) и практически любой другой язык.
Хотя не уверен на счет "не умеет". У меня nginx прекрасно проксирует gRPC трафик, который работает через http2 https://www.nginx.com/blog/nginx-1-13-10-grpc/
Судя по конфигу из приведённой ссылки, nginx проксирует именно gRPC-траффик.
http {
server {
location / {
grpc_pass grpc://...;
}
}
}
Т.е., обычный 'h2c' за пределами его возможностей. Мне пока не удалось найти пример конфигурации, аналогичный apache'вской, чтобы заставить nginx проксировать запросы на простой HTTP/2-сервер (не gRPC). Обычный proxy_pass
со второй версией HTTP не работает, судя по документации (и вообще на этой странице поиск по ключу h2c
ничего не даёт).
А какие версии HTTP поддерживают ваши nodejs-приложения?