WebSockets не работает с серверной частью балансировщика нагрузки HTTP / 2 в GCP

У меня есть приложение, работающее за балансировщиком нагрузки в Google Cloud Platform.

Когда я использую протокол HTTPS в бэкэнде, я могу подключаться к WebSockets, и все соединения WebSocket работают нормально. Однако, когда я меняю внутренний протокол на HTTP / 2, я не могу подключиться из приложения, и оно возвращает ответ 502 Bad Gateway.

Могу ли я использовать WebSockets с HTTP / 2, или мне нужно выполнить некоторую настройку, чтобы использовать WebSockets с серверной частью HTTP2?


person Bhavya Jain    schedule 06.01.2020    source источник
comment
Прокси-сервер Websocket должен быть прозрачным для балансировщика нагрузки, в документации ничего не говорится о протоколе HTTP2. https://cloud.google.com/load-balancing/docs/https/#websocket_proxy_support   -  person Pievis    schedule 06.01.2020
comment
привет @Pievis, но я не могу понять, что прокси-сервер Websocket должен быть прозрачным для балансировщика нагрузки, пожалуйста, объясните мне эту строку? Спасибо   -  person Bhavya Jain    schedule 06.01.2020
comment
Для рукопожатия WebSocket требуется HTTP / 1.1 (на данный момент) ... Если вы форсируете все коммуникации в HTTP / 2, вы нарушите рукопожатие WebSocket. Это связано с тем, что HTTP / 2 не поддерживает директиву Upgrade.   -  person Myst    schedule 07.01.2020
comment
Дополнительная информация: https://cloud.google.com/load-balancing/docs/https/#websocket_proxy_support   -  person John Hanley    schedule 07.01.2020
comment
Не используйте серверные части HTTP / 2 с WebSockets. Балансировщик нагрузки перенаправит запрос протокола обновления HTTP на серверные ВМ, что не удастся.   -  person John Hanley    schedule 07.01.2020


Ответы (1)


Как отмечали другие, WebSockets не поддерживаются в HTTP / 2, и это причина, по которой вы получаете ошибку 5XX.

При этом функциональность WebSocket достижима (и улучшена) с помощью HTTP / 2 ref.

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

Однако, если вы разрабатываете новую асинхронную службу, рекомендуется взглянуть на схему HTTP / 2 + Server Sent Event (SSE).

person Juancki    schedule 09.01.2020