[英]javascript mqtt websocket works fine in localhost, not working in https server
javascript mqtt websocket connection works fine in localhost, not working in https server javascript mqtt websocket 连接在 localhost 中工作正常,在 https 服务器中不工作
Code代码
<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
The error message is pretty clear about what the problem is错误消息很清楚问题是什么
> 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.
The browser is enforcing a secure origin policy.浏览器正在执行安全源策略。 This means that any resource accessed from a page loaded via HTTPS must be accessed by an equally secure fashion.这意味着从通过 HTTPS 加载的页面访问的任何资源都必须以同样安全的方式访问。 So in this case if you load the page via HTTP you must use a secure Web Socket connection to connect to the MQTT broker.因此,在这种情况下,如果您通过 HTTP 加载页面,则必须使用安全的 Web 套接字连接来连接到 MQTT 代理。
You will need to enable Secure Websockets on your broker and either use a wss://
URL or add useSSL: true
to the options passed to the client.connect()
function.您将需要在您的代理上启用安全 Websockets 并使用wss://
URL 或将useSSL: true
添加到传递给client.connect()
function 的选项中。
The second option is to have what ever is serving up you webpage proxy for the broker and do the SSL/TLS termination there.第二种选择是让曾经为您提供网页代理的代理,并在那里进行 SSL/TLS 终止。 eg Nginx or Apache.例如 Nginx 或 Apache。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.