首页 > 解决方案 > 汉莎失败!缺少 WebSocket 连接和升级标头?

问题描述

我有一个在私有子网中的 ECS Fargate 任务上运行的微服务应用程序。我创建了一个 REST API 网关,它将请求转发到网络负载均衡器,然后 NLB 将请求重定向到应用程序负载均衡器。最后,ALB 找到相关的容器并将传入的请求发送给它。

总之,流程是客户端 -> REST API 网关 -> NLB -> ALB -> Fargate 任务。

现在,我可以调用 REST 端点并成功接收响应。但是,我的一个应用程序还包括一个 websocket 端点,我无法通过 REST API 网关建立 websocket 连接 (wss)。问题是我发送到网关的请求错过了连接和升级标头。但是,实际上,本地计算机上的标头没有问题;当我通过 CloudWatch 日志检查如下时,我发送到 REST API 网关的请求不包括这些标头。

API 网关日志

> (6663bb3f-a1c7-45f7-....) Method request headers:
> {Origin=chrome-extension://mdmlhchldhfnfnkfmljgeinlffmdgkjo,
> Sec-WebSocket-Key=oybxAVOYCkNP2bsskgXaJQ==, User-Agent=Mozilla/5.0
> (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like
> Gecko) Chrome/91.0.4472.101 Safari/537.36, X-Forwarded-Proto=https,
> Sec-WebSocket-Version=13, Host=-------,
> Accept-Encoding=gzip, deflate, br, Pragma=no-cache,
> X-Forwarded-Port=443, Sec-WebSocket-Protocol=ocpp1.6,
> X-Amzn-Trace-Id=Root=1-610a4fba-73e4f3796a63c23c5f9e3dfb,
> Sec-WebSocket-Extensions=permessage-deflate; client_max_window_bits,
> Cache-Control=no-cache, X-Forwarded-For=185.67.125.128,
> Accept-Language=en-US,en;q=0.9,tr;q=0.8}

因此,我在应用程序日志中观察到以下代码。

o.s.w.s.s.s.DefaultHandshakeHandler : Handshake failed due to invalid Upgrade header: null

标签: amazon-web-servicesspring-bootwebsocketaws-api-gateway

解决方案


推荐阅读