AWS API Gateway WebSocket集成Spring Boot Netty Socket.io时出现HTTP/1.1 101 Switching Protocols错误的解决方案咨询
解决AWS API Gateway HTTP集成WebSocket返回101错误的问题
我之前帮开发者处理过类似的API Gateway + Socket.io集成问题,你遇到的「Execution failed due to configuration error: Unexpected response: HTTP/1.1 101 Switching Protocols」错误,核心原因是AWS API Gateway没有正确识别并转发后端返回的WebSocket握手响应。下面是具体的解决步骤:
1. 修正集成请求配置
这是最关键的一步,之前禁用代理集成的操作可能直接导致了问题:
- 登录AWS API Gateway控制台,找到你的WebSocket API,进入对应的
$connect路由配置页面 - 在「集成请求」模块,启用代理集成。代理集成会直接透传后端的所有响应头和状态码,包括101握手响应,这是最省心的标准配置方式
- 如果因为业务需求必须使用非代理集成(自定义映射),请调整以下设置:
- 确保「添加集成响应」已开启,然后添加一个响应键为
101的规则(注意不要加斜杠,你之前用的/101/格式是错误的) - 为这个101响应规则设置状态码为
101,映射模板保持默认的$input.path('$')即可(不需要自定义模板)
- 确保「添加集成响应」已开启,然后添加一个响应键为
2. 启用并配置路由响应
虽然你提到路由响应处于禁用状态,但对于WebSocket的$connect路由,必须启用路由响应并配置101状态码:
- 进入「路由响应」页面,点击「创建路由响应」
- 选择响应键为
101,设置状态码为101,保存配置即可
3. 验证后端握手响应(无需修改代码)
你的Netty SocketIO后端应该已经正确返回了符合标准的101握手响应,包含以下关键头:
Upgrade: websocketConnection: UpgradeSec-WebSocket-Accept(由Netty自动计算生成)
只要你没有自定义拦截器或过滤器篡改这些响应头,就不需要修改后端代码。
额外排查点
- 重新部署API Gateway阶段:修改配置后一定要部署到对应的stage,否则新配置不会生效
- 检查VPC访问权限:如果你的后端在AWS VPC内,确保API Gateway有访问后端5291端口的权限
- 查看CloudWatch日志:在API Gateway的「监控」页面开启日志,通过日志可以看到具体的请求/响应细节,帮助快速定位问题
内容的提问来源于stack exchange,提问作者Trupti Prajapati
相关产品推荐
相关产品推荐

