amazon-web-services - 汉莎失败!缺少 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
- 有什么想法可以解决这个问题吗?
- 我不认为我必须创建一个 WebSocket API 网关,对吗?
解决方案
推荐阅读
- spring-boot - 引导代理 localhost:9092 (id: -1 rack: null) 断开连接 - Apache Kafka
- javascript - 如何在JS中分别循环遍历每个数组块
- reactjs - 是否可以有条件地在 React 中加载某个 css 文件
- javascript - Ajax 页面加载未定义
- django - 如何将 ExclusionConstraint 与可能已经删除无效记录的 inline_formset 一起使用?
- java - 编译 Unity Android 应用程序 (Gradle) 时出错
- php - 删除图像名称之间的空格
- gstreamer - 为什么我在 windows pc 接收器上重复 gstreamer 错误
- numpy - 重采样 n 维 numpy 数组的一维
- c - 调用无效函数?