AWS API Gateway WebSocket模式HTTP集成下$connect连接逻辑异常咨询
WebSocket API Gateway $connect 连接控制问题处理
我使用WebSocket模式的AWS API Gateway,采用HTTP集成(非代理模式),遇到了一个问题:我的服务针对$connect端点返回任意响应码时,API Gateway始终会与客户端建立连接。

但官方文档中明确说明:
在与$connect路由关联的集成执行完成之前,升级请求处于挂起状态,实际连接不会建立。如果$connect请求失败(例如,由于身份验证/授权失败或集成失败),则不会建立连接。
问题原因及解决步骤
- 非代理集成的默认逻辑:非代理HTTP集成模式下,API Gateway不会自动根据后端返回的状态码终止连接,必须手动配置集成响应的规则来触发断开行为。
- 配置集成响应实现断开:在API Gateway控制台的
$connect路由集成响应中,为需要拒绝连接的状态码(如401、403、500等)做如下配置:- 启用"终止连接"选项;
- 添加响应头
Connection: close; - 可选:设置响应模板,返回提示客户端连接被拒绝的内容。
- 优先使用授权器处理权限问题:如果是身份验证/授权失败场景,直接使用API Gateway的自定义授权器或IAM授权,这类失败会直接终止连接,不需要后端额外处理;如果是业务逻辑层面拒绝连接,才需要通过上述集成响应配置实现。
- 验证测试:用
wscat工具测试连接,执行命令:
观察后端返回错误码时,是否收到关闭帧而非成功建立连接。wscat -w 1 -c wss://你的API域名/你的阶段名
内容的提问来源于stack exchange,提问作者Max Grigoriev
相关产品推荐
相关产品推荐

