[英]websocket handshake on node.js
我正在尝试构建一个管理与node.js的websocket连接的代码
我没有找到一种方法让握手在chrome中被接受
Chrome返回“WebSocket连接到'ws://127.0.0.1:8888 /'失败:WebSocket握手期间出错:Sec-WebSocket-Accept mismatch”
有了这个
<< >>>
var http=require("http");
var crypto=require("crypto");
var server=http.createServer(function(req,res){
res.writeHeads("200","content-type:text/plain");
res.end();
});
server.on("upgrade",function(req,socket,head){
for(var item in req.headers){
console.log(item);
console.log(req.headers[item]);
}
var GUID="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
var secKey=req.headers["sec-websocket-key"];
var sha=crypto.createHash("sha1");
secKey+=GUID;
secKey=sha.update(secKey).digest("base64");
var key64=new Buffer(secKey);
key64=key64.toString("base64");
console.log(key64);
var headersReturn='HTTP/1.1 101 Switching Protocols\r\n';
headersReturn+='Upgrade: websocket\r\n';
headersReturn+='Connection: Upgrade\r\n';
headersReturn+='Sec-WebSocket-Accept:'+key64+"\r\n\r\n";
var boo=socket.write(headersReturn);
console.log(headersReturn);
socket.on("connect",function(){console.log("success");});
socket.on("data",function(data){
console.log(data);
});
});
server.listen(8888,"127.0.0.1",function(){
console.log("server is on 8888");
});
<<< >>>>
希望有人能看到遗漏的东西。
代码的问题是你试图base64两次。 不需要base64在base64中已经存在的secKey.Its。
评论以下几行。
var key64=new Buffer(secKey);
key64=key64.toString("base64");
在上面的注释行之后添加此代码。
var key64 = secKey;
经过上述修改后,错误消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.