You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需MQTT客户端连接AWS IoT Websocket遇426错误问题

解决MQTT预签名URL连接返回426 Upgrade Required的问题

我之前在处理浏览器端IoT MQTT连接时碰到过几乎一模一样的问题,结合你的场景,给你几个实际可排查的方向:

  • 检查预签名URL的协议与路径
    MQTT over WebSocket必须使用ws://或wss://协议开头,并且路径通常需要指定为/mqtt(不同IoT平台可能略有差异)。如果你的预签名URL是https://开头,服务器会把它当成普通HTTP请求,自然会返回426要求升级协议。务必确认URL格式是wss://your-iot-endpoint/mqtt?[签名参数]这种形式。

  • 验证请求头是否包含WebSocket升级字段
    426错误最常见的原因是握手请求缺少Upgrade: websocket和Connection: Upgrade这两个核心请求头。虽然你说无法修改客户端代码,但可以通过浏览器开发者工具的Network面板抓包查看WebSocket握手请求的头信息:

    找到对应的GET请求,查看Request Headers里是否存在这两个字段。
    如果没有,去查你使用的库的文档——有些库可能允许通过配置项(比如headers参数)强制添加这些头,或者库本身默认不支持WebSocket升级,需要换一个兼容的库。

  • 确认IoT平台的WebSocket接入配置
    很多IoT云平台需要在控制台手动开启WebSocket接入功能,或者指定对应的端口(比如wss常用8443端口)。如果平台未启用WebSocket服务,即使URL和请求头正确,服务器也无法处理协议升级请求,只会返回426。去你的IoT平台控制台检查WebSocket相关的开关和端口配置。

  • 检查预签名URL的签名参数与权限
    确保预签名URL的签名逻辑正确:

    • 签名时使用的HTTP方法是GET(因为WebSocket握手是GET请求);
    • 签名包含了正确的IoT endpoint和/mqtt路径;
    • 签名的有效期、凭证权限足够,能允许WebSocket连接。
      签名参数错误可能导致服务器无法识别这是一个合法的MQTT WebSocket请求,从而返回426。

如果以上排查都没问题,可能需要考虑通过反向代理来补全必要的请求头——不过这需要你能控制代理服务器,并且要确保代理不会破坏预签名URL的认证逻辑。

内容的提问来源于stack exchange,提问作者Ben Swinburne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:30:28