如何解决javascript mqtt websocket 在本地主机中工作正常,在 https 服务器中不起作用
javascript mqtt websocket 连接在本地主机中工作正常,而不是 在 https 服务器上工作
代码
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Hello MQTT World</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="paho-mqtt.js"></script>
</head>
<body>
<script>
var client = new Paho.Client('myserver.com',8083,'asdfg');
client.connect({
reconnect:true,onSuccess:function(){
console.log('Connected');
client.subscribe("/abcd/+/#"); // Where 16 is the bspid
}
});
client.onMessageArrived=function(message){
console.log(message);
};
</script>
<ul id="logger"></ul>
</body>
</html>
Fehlermeldung
> Error paho-mqtt.js:1054 Mixed Content: The page at
> 'https://myserver.com/pis/monitoring/mqtt.html' was loaded over HTTPS,> but attempted to connect to the insecure WebSocket endpoint
> 'ws://myserver.com:8083/mqtt'. This request has been blocked; this
> endpoint must be available over WSS.
> LibraryFactory.ClientImpl._doConnect @ paho-mqtt.js:1054
> LibraryFactory.ClientImpl.connect @ paho-mqtt.js:887 Client.connect @
> paho-mqtt.js:2028 (anonymous) @ mqtt.html:12 paho-mqtt.js:1054
> Uncaught DOMException: Failed to construct 'WebSocket': An insecure
> WebSocket connection may not be initiated from a page loaded over
> HTTPS.
> at ClientImpl.LibraryFactory.ClientImpl._doConnect (https://myserver.com/pis/monitoring/paho-mqtt.js:1054:19)
> at ClientImpl.LibraryFactory.ClientImpl.connect (https://myserver.com/pis/monitoring/paho-mqtt.js:887:10)
> at Client.connect (https://myserver.com/pis/monitoring/paho-mqtt.js:2028:12)
> at https://myserver.com/pis/monitoring/mqtt.html:12:8 LibraryFactory.ClientImpl._doConnect @ paho-mqtt.js:1054
> LibraryFactory.ClientImpl.connect @ paho-mqtt.js:887 Client.connect @
> paho-mqtt.js:2028 (anonymous) @ mqtt.html:12
解决方法
错误信息很清楚问题是什么
> Error paho-mqtt.js:1054 Mixed Content: The page at
> 'https://myserver.com/pis/monitoring/mqtt.html' was loaded over HTTPS,> but attempted to connect to the insecure WebSocket endpoint
> 'ws://myserver.com:8083/mqtt'. This request has been blocked; this
> endpoint must be available over WSS.
浏览器正在执行安全来源政策。这意味着从通过 HTTPS 加载的页面访问的任何资源都必须以同样安全的方式访问。因此,在这种情况下,如果您通过 HTTP 加载页面,则必须使用安全的 Web 套接字连接来连接到 MQTT 代理。
您需要在代理上启用安全 Websocket,并使用 wss://
URL 或将 useSSL: true
添加到传递给 client.connect()
函数的选项中。
第二个选择是让代理为您提供网页代理,并在那里执行 SSL/TLS 终止。例如Nginx 或 Apache。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。