Blazor WebAssembly中MQTT over WebSocket异常,强制用WSS报错
Blazor中使用Paho实现MQTT over WebSocket时强制使用WSS的问题
我尝试在Blazor中用Paho实现MQTT over WebSocket客户端订阅者,但连接时系统强制使用WSS而非WS,抛出ERR_SSL_PROTOCOL_ERROR错误。
简化代码块
var mqtt; var host = "api.mydomainexample.com"; var port = 1884; function onConnect(){ console.log("connected ! Now listening for messages .."); mqtt.subscribe("someTopic"); } function onFailure(message){ console.log("connection to host failed: " + message); } function onMessageArrived(msg){ var message = "Message received on topic '"+ msg.destinationName +"': "+ msg.payloadString; console.log(message); } function mqttConnect() { console.log("connecting to " + host + " .."); mqtt = new Paho.MQTT.Client(host, port, clientid); var options = { timeout: 3, onSuccess: onConnect, onFailure: onFailure, useSSL: false }; mqtt.onMessageArrived = onMessageArrived; mqtt.connect(options); }
测试情况
将这段代码复制到记事本创建的HTML页面中,调用函数后在浏览器运行正常,能成功订阅。我已在连接选项中添加useSSL: false,但问题仍未解决。
控制台报错信息
WebSocket connection to 'wss://api.mydomainexample:1884/mqtt' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
已尝试的操作
修改了项目启动设置,将启动方式改为HTTP而非HTTPS,因为根据相关解答,无法从HTTPS加载的页面使用WS连接。
疑问
请问有什么解决办法?能否在Blazor中无需证书连接WebSocket?
解决方案
- 修正Blazor启动配置:检查
Properties/launchSettings.json文件,确保applicationUrl只保留HTTP地址,移除sslPort配置项,同时将environmentVariables中的ASPNETCORE_ENVIRONMENT设为Development,避免生产环境的强制HTTPS跳转逻辑生效。 - 显式指定WS协议地址:创建Paho客户端时,直接传入完整的WS协议地址,替代单独传入host和port的方式,强制客户端使用WS而非自动切换到WSS:
// 替换原客户端初始化代码 mqtt = new Paho.MQTT.Client("ws://api.mydomainexample.com:1884/mqtt", clientid); - 清除浏览器HSTS缓存:部分浏览器会因HSTS配置自动将HTTP请求升级为HTTPS,可在浏览器开发者工具的「Security」标签页检查相关提示,若存在HSTS记录,可在浏览器对应设置中删除目标域名的HSTS缓存(比如Chrome可访问
chrome://net-internals/#hsts操作)。 - 验证MQTT Broker配置:确认你的MQTT Broker(如EMQX、Mosquitto)已在1884端口开启非SSL的WebSocket监听,无强制SSL要求。可使用
wscat工具测试连接:wscat -c ws://api.mydomainexample.com:1884/mqtt,确认Broker能正常响应WS连接。
内容的提问来源于stack exchange,提问作者NadaNK
相关产品推荐
相关产品推荐

