Кажется, я получаю неправильное хеш-значение, учитывая ключ через мой webSocket. Из того, что я могу сказать, клиентская сторона сокета работает, потому что, когда у меня есть это, соединяются с другими серверами, это успешно.
index.js
const http = require('http')
const cryp=require('crypto')
const port = 8080
var ourHTML=require('fs').readFile("index.html",(err,data) => {
if(err) throw err;
ourHTML = data.toString();
});
const requestHandler = (request, response) => {
//console.log(request)
response.end(ourHTML)
}
const server = http.createServer(requestHandler)
server.on('upgrade',(req,socket)=>{
if(req.headers['upgrade'] !== 'websocket'){
socket.end('HTTP/1.1 400 Bad Request');
return;
}
const hash=getAVal(req.headers['sec-websocket-key']);
console.log(hash);
socket.write([
"HTTP/1.1 101 Web Socket Protocol Handshake",
"Upgrade: WebSocket",
"Connection: Upgrade",
`Sec-WebSocket-Accept: ${hash}`
].join('\r\n')+'\r\n\r\n');
//socket.end();
});
function getAVal(key){
console.log(key);
return cryp
.createHash('sha1')
.update(key+'258EAFA5-E914–47DA-95CA-C5AB0DC85B11', 'binary')
.digest('base64');
}
server.listen(port, (err) => {
if(err){
return console.log("Uhh ohh, "+err.stack,err)
}
console.log("server listening at "+port)
})
index.html
<html>
<head><title>Local Server</title></head>
<body><h1>Local Server Body</h1><p id="p">To Change</p></body>
<script>
console.log("here");
var ws=new WebSocket("ws://10.0.0.150:8080");
//var ws=new WebSocket("wss://echo.websocket.org");
setInterval(req,1000);
function req(){
ws.send("tickReq");
}
ws.addEventListener('open', () => {
ws.send("Hello");
});
ws.addEventListener('message', event => {
document.getElementById("p").innerHTML=event.data;
});
</script>
</html>
Примером ключа и хэш-пары при запуске является:
PxsrStN1CGLK / JBYydUFjg ==
QAK + TE6u + sV705GI + LpP4yKM04Y =
Верхняя часть - это ключ, данный браузером, а нижняя часть - это то, что возвращает функция getAVal, и это сообщение вызывается неверно.
Ошибка во время рукопожатия WebSocket: неверное значение заголовка Sec-WebSocket-Accept