当前位置: 首页 > 知识库问答 >
问题:

Websocket握手秒Websocket接受标头值不正确

糜野
2023-03-14

我正在写一个c websocket服务器,chrome上的开发工具说SecWebSocket接受头值不正确。我已经测试了好几天了,一切似乎都很好。客户端使用readystate 3关闭,而不调用websocket onopen,尽管它在chrome开发工具中显示为101。

这是我计算钥匙的代码

string magickey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
string key = msgkey.append(magickey);

unsigned char* sha_str = SHA1(reinterpret_cast<const unsigned char*>(key.c_str()), key.length(), nullptr);
string acceptkey = base64_encode(reinterpret_cast<const unsigned char*>(sha_str), strlen((char*)sha_str));

string handshake_response = "HTTP/1.1 101 Switching Protocols\r\n";
handshake_response.append("Upgrade: websocket\r\n");
handshake_response.append("Connection: Upgrade\r\n");
handshake_response.append("Sec-WebSocket-Accept: "+acceptkey+"\r\n");
handshake_response.append("\r\n");  

铬反应

HTTP/1.1 101 Switching Protocols  
Upgrade: websocket  
Connection: Upgrade  
Sec-WebSocket-Accept: 5T5MvxP1iz40vLpi3kQs/ifDaCo=  

Chrome请求

GET ws://localhost:4897/echo HTTP/1.1  
Host: localhost:4897  
Connection: Upgrade  
Pragma: no-cache  
Cache-Control: no-cache  
Upgrade: websocket  
Origin: http://localhost  
Sec-WebSocket-Version: 13  
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36  
Accept-Encoding: gzip, deflate, sdch  
Accept-Language: en-US,en;q=0.8  
Sec-WebSocket-Key: LKF8lHGznbKGIgO1UzAOhg==  
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits  

它表示"WebSocket握手过程中出错:不正确的'Sec-WebSocket-Access'标头值"。

Chrome还示出了接收大小为79字节的操作码-1的一个附加帧。

谢谢你!

共有1个答案

曹伟泽
2023-03-14

Chrome说,Sec-WebSocket-Access是不正确的。试图手动计算它,我不得不同意Chrome。

我的测试:

  1. "LKF8lHGznbKGIgO1UzAOhg=="和"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"=

粗体值应该相等。如果我哪里错了,请随时纠正我。

可能出现的问题:

>

签名/未签名字符混合?

 类似资料:
  • 我正在用C编写一个websocket服务器,无法让握手正常工作。Chrome报告错误是由于错误的accept头,但我相信该值是正确的。 作为exchange的一个示例,客户端发送以下密钥: 我的服务器会发回: 我已经根据RFC中的示例测试了我的服务器,并进行了验证。我不知道为什么不被接受。我的理论是,我必须做一些其他事情,产生与坏接受值相同的错误。 以下是不同于wireshark捕获的请求: 以下

  • 我正在做我的第一个测试,尝试使用phpwebsocket。 我将其握手标题值设置为以下值: 所以我运行web套接字PHP文件(创建连接),一切正常。 因此,我运行测试html,其中包含一个脚本,该脚本试图连接到我正在使用的phpwebsocket,在浏览器控制台中,我收到以下错误: 但是我发现这个错误在WebSocket握手:不正确的'Sec-WebSocket接受'头值与PHP,这是通过定义缓冲

  • 我正在使用Python的套接字来响应Websocket请求,并且我面临着头的问题。以前可能有过类似的问题,但没有人为我工作 文档位于https://developer.mozilla.org声明对于要建立的连接: 服务器获取握手请求中发送的Sec-WebSocket-Key的值,追加258EAFA5-E914-47DA-95CA-C5AB0DC85B11,获取新值的SHA-1,然后对其进行Bas6

  • ASP.NET 5 RC1上的信号器3-RC1用户 尝试运行websocket时出现以下错误。 使用Chrome50.0.2661.87 标题如下: 请求标题: 日期:2016年4月29日星期五13:51:54 GMT 服务器:Kestrel 传输编码:分块 升级:websocket X-Content-Type-Options:nosniff X-Powered-By:ASP.NET 响应头:

  • 我正在使用Windows server 2019,反向代理配置为ARR 3,并使用节点托管我的项目。js和socket。io,我正在重定向网站至内部地址。 当我尝试访问网站时在服务器套接字内。io正在工作,但当我尝试使用外部地址访问网络外部的网站时,我收到了错误消息 Web套接字握手期间出错:“Sec WebSocket Accept”标头值不正确

  • 我有一个使用WinSock2的cpp服务器,我试图用我的javascript客户端连接到这个服务器,但它不起作用,chrome控制台说“WebSocket握手过程中出错:不正确的‘Sec-WebSocket-Access’标头值”。我把我的sha1和bas64函数与在线进行了比较Sha1和Base64,所以问题不在这里。 Chrome响应报头: Chrome请求头: 服务器代码: 客户代码: