Browser WebSocket键是如何工作的?

Browser WebSocket键是如何工作的?,browser,websocket,Browser,Websocket,最近我一直在研究WebSocket,我觉得它们很酷。然而,如果我看一看,有些事情对我来说是不清楚的 请求: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Ori

最近我一直在研究WebSocket,我觉得它们很酷。然而,如果我看一看,有些事情对我来说是不清楚的

请求:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
答复:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
请求者指定主机,因此中间服务器将知道请求应该到达哪里。请求者发送一个编码为base64的随机字符串,服务器发回一个加密的SALT SHA1密钥。当连接处于活动状态时,此键是否会在两者之间使用?如果是这样,是否有一种方法可以在连接断开的情况下重用此密钥

散列函数附加固定字符串 将258EAFA5-E914-47DA-95CA-C5AB0DC85B11(GUID)设置为 Sec WebSocket密钥头(未从base64解码)适用 SHA-1哈希函数,并使用base64对结果进行编码


更多信息请访问:

,如您的维基百科链接中所述:

除了升级头之外,客户端还发送一个包含base64编码的随机字节的Sec WebSocket密钥头,服务器用Sec WebSocket Accept头中密钥的哈希值进行回复这是为了防止缓存代理重新发送以前的WebSocket对话,并且不提供任何身份验证、隐私或完整性。

秒WebSocket键
仅在握手时使用,不用于实际通信

该密钥旨在通过发送随机密钥防止代理缓存请求。如果代理仍然返回缓存响应,则可以通过验证
Sec WebSocket Accept
头来检查它

客户端可以忽略
Sec WebSocket Accept
头(希望响应没有被缓存),WebSocket协议仍能正常工作。
在这种情况下,服务器可以忽略
Sec-WebSocket键
头,而不返回
Sec-WebSocket-Accept

如何生成用于响应或验证的
Sec-WebSocket-Accept
标题可在以下答案中阅读: