Javascript 如何验证einaros';ws-websocket包
我已经厌倦了下面的代码,它不起作用:Javascript 如何验证einaros';ws-websocket包,javascript,node.js,websocket,Javascript,Node.js,Websocket,我已经厌倦了下面的代码,它不起作用: var WebSocketServer = require('ws').Server; var wsServer = new WebSocketServer({port: 8080}); wsServer.on('connection', function(ws) { if (ws.origin != 'http://example.com') { console.log('Origin was not http://exam
var WebSocketServer = require('ws').Server;
var wsServer = new WebSocketServer({port: 8080});
wsServer.on('connection', function(ws) {
if (ws.origin != 'http://example.com') {
console.log('Origin was not http://example.com');
return;
}
});
这段代码在worlize的websocket服务器包中运行良好。但我更喜欢埃纳罗斯的。
但是,当我调查ws.property时,它包含如下内容:
headers: {
...
origin: 'http://example.com'
...
},
那么如何验证浏览器请求的来源呢
谢谢你,我最终能找到它:
var domain = ws.upgradeReq.headers.origin;
我最终能找到它:
var domain = ws.upgradeReq.headers.origin;
从源代码中搜索,我找到了一个我可以接受的解决方案。 通过verifyClient选项
var webSockOpts=
{port :myport
,verifyClient : function (info, callback) {
var question=url.parse(info.req.url, true, true);
if (parseInt (question.query.API_KEY) === 123456789) {
status= true; // I'm happy
code = 400; // everything OK
msg = ''; // nothing to add
} else {
status= false; // I'm noy happy
code = 404; // key is invalid
msg = 'Demo requires API_KEY=123456789';
}
callback (status,code,msg);
}
}
wsServer=new webSocket (webSockOpts);
在HTML/JavaScript中添加如下内容:
ws = new WebSocket('ws://' + host + ':4081' + '/log?API_KEY=123456789');
从源代码中搜索,我找到了一个我可以接受的解决方案。 通过verifyClient选项
var webSockOpts=
{port :myport
,verifyClient : function (info, callback) {
var question=url.parse(info.req.url, true, true);
if (parseInt (question.query.API_KEY) === 123456789) {
status= true; // I'm happy
code = 400; // everything OK
msg = ''; // nothing to add
} else {
status= false; // I'm noy happy
code = 404; // key is invalid
msg = 'Demo requires API_KEY=123456789';
}
callback (status,code,msg);
}
}
wsServer=new webSocket (webSockOpts);
在HTML/JavaScript中添加如下内容:
ws = new WebSocket('ws://' + host + ':4081' + '/log?API_KEY=123456789');
这似乎只有在浏览器确实设置了标题值时才起作用。换句话说:它不可靠,因为它依赖于客户端的合作。
Origin
头是WebSocket协议的一部分,因此所有客户端都将支持它。(:“所有浏览器都将发送一个源标题。”)这似乎只有在浏览器确实设置了该标题值时才起作用。换句话说:它不可靠,因为它依赖于客户端的合作。Origin
头是WebSocket协议的一部分,因此所有客户端都将支持它。(:“所有浏览器都将发送一个源标题。”)