【问题标题】:WebSockets not working with HTTP/2 Load Balancer backend in GCPWebSockets 不适用于 GCP 中的 HTTP/2 负载均衡器后端
【发布时间】:2020-04-23 21:37:10
【问题描述】:

我有一个在 Google Cloud Platform 中的负载均衡器后面运行的应用程序。

当我在后端使用 HTTPS 协议时,我能够与 WebSockets 连接,并且所有 WebSocket 连接都可以正常工作。但是,当我将后端协议更改为 HTTP/2 时,我无法从应用程序连接,并返回 502 Bad Gateway 的响应。

我可以将 WebSockets 与 HTTP/2 一起使用,还是需要执行一些配置才能将 WebSockets 与 HTTP2 后端一起使用?

【问题讨论】:

  • Websocket 代理对负载均衡器应该是透明的,在文档中它并没有过多地说明 HTTP2 协议。 cloud.google.com/load-balancing/docs/https/…
  • 你好@Pievis,但我无法理解Websocket代理应该对负载均衡器透明可以请解释一下这行吗?谢谢
  • WebSocket 握手需要 HTTP/1.1(目前)...如果您强制所有通信进入 HTTP/2,您将中断 WebSocket 握手。这是因为 HTTP/2 确实支持 Upgrade 指令。
  • 不要将 HTTP/2 后端与 WebSocket 一起使用。负载均衡器会将 HTTP 升级协议请求转发到后端,这将失败。

标签: networking websocket google-cloud-platform http2 google-cloud-load-balancer


【解决方案1】:

正如其他人评论的那样,HTTP/2 不支持 WebSocket,这就是您收到 5XX 错误的原因。

话虽如此,使用 HTTP/2 ref 可以实现(并改进)WebSocket 功能。

如果您有使用 WebSocket 的现有代码,那么重写后端和前端可能不是很好。

但是,如果您正在开发一个新的异步服务,最好看看 HTTP/2 + 服务器发送事件 (SSE) 方案。

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2021-09-01
    • 2015-09-18
    • 2019-12-14
    • 2014-02-12
    • 2020-03-14
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多