首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从JavaScript客户端通过https连接到websocket服务器

问无法从JavaScript客户端通过https连接到websocket服务器
EN

Stack Overflow用户
提问于 2017-06-27 11:58:15
回答 2查看 3.9K关注 0票数 2

我使用以下代码为我的webrtc应用程序创建了websocket服务器

代码语言:javascript
复制
 const https = require('https');
const fs = require('fs');

const options = {
    key: fs.readFileSync('C:/.../key_store.key'),
    cert: fs.readFileSync('C:/.../key_store.crt')
};

var server = https.createServer(options, (req, res) => { res.writeHead(200); res.end('hello world\n');}).listen(9090);



//require our websocket library
var WebSocketServer = require('ws').Server;

//creating a websocket server at port 9090 
var wss = new WebSocketServer({server});

我的websocket客户端代码是:

代码语言:javascript
复制
conn = new WebSocket('ws://localhost:9090');

当我试图使用上面的代码连接到websocket服务器时,我在JavaScript控制台中得到了以下异常:

35 908:35连接到'ws://localhost:9090/‘的WebSocket连接失败:连接在收到握手响应之前已关闭

我试着用铬导入证书,但没有成功。

EN

回答 2

Stack Overflow用户

发布于 2017-06-27 16:43:20

WebRTC需要https,而https页面只允许安全的Wecsockets (wss)连接。

因此,您需要在客户端创建WebSocket,如下所示

代码语言:javascript
复制
conn = new WebSocket("wss://your_server_ip:wss_port/");
In your case:
conn = new WebSocket("wss://139.126.123.18:9090/");

我认为您正在您的WebSocket服务器中使用自签名SSL证书(key_store.crt/.key)。

在这种情况下,浏览器将为这些连接引发ERR_INSECURE_RESPONSE异常。

因此,我们通过访问浏览器中的url来手动添加异常,如下所示。

在“新”选项卡中打开https://139.126.123.18:9090/,

然后点击高级->继续(对于Chrome)。

也可以将自签名CA导出到浏览器。

现在,您的安全WebSocket应该连接起来。

票数 2
EN

Stack Overflow用户

发布于 2017-06-27 12:27:40

尝试将您的代码更改为以下内容

代码语言:javascript
复制
const https = require('https');
const fs = require('fs');
const options = {
    key : fs.readFileSync('C:/.../key_store.key'),
    cert : fs.readFileSync('C:/.../key_store.crt')
};
var server = https.createServer(options).listen(9090);
//require our websocket library
var WebSocketServer = require('ws').Server;
//creating a websocket server at port 9090
var wss = new WebSocketServer({server});

// wait for connection to be established
wss.on('connection', (ws, req) => { 

    // send some message
    ws.send('hello world\n');

    // close connection
    ws.close(); 
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44779727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档