【问题标题】:javascript mqtt websocket works fine in localhost, not working in https serverjavascript mqtt websocket在localhost中工作正常,在https服务器中不起作用
【发布时间】:2021-04-30 16:43:47
【问题描述】:

javascript mqtt websocket 连接在 localhost 中可以正常工作,而不是 在 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>

无名氏

> 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

【问题讨论】:

    标签: javascript websocket https mqtt paho


    【解决方案1】:

    错误信息很清楚问题是什么

    > 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 Socket 连接来连接到 MQTT 代理。

    您需要在您的代理上启用安全 Websocket,并使用wss:// URL 或将useSSL: true 添加到传递给client.connect() 函数的选项中。

    第二个选项是让曾经为您提供网页代理的代理,并在那里进行 SSL/TLS 终止。例如Nginx 或 Apache。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2013-02-24
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2019-12-23
    • 2020-07-16
    相关资源
    最近更新 更多