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协议的一部分,因此所有客户端都将支持它。(:“所有浏览器都将发送一个源标题。”)