来自Quora答案:
选择魔术字符串没有任何理由。特定的魔法字符串GUID被选择是为了为WebSockets协议添加一定程度的完整性,因为该字符串是全局唯一的。
RFC(RFC 6455 - WebSocket协议)只是说:
...与以字符串形式表示的全球唯一标识符(GUID, [RFC4122])“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”连接起来,这个GUID不太可能被不理解WebSocket协议的网络端点使用。
希望这回答了你的问题。
new WebSocket("wss://echo.websocket.org")
从调试器中,我们可以看到一个101 GET
请求,并通过检查请求头来查看这个特定的条目:
Sec-WebSocket-Key: qcq+klmT4W41IrmG3/fseA==
这是一个唯一的哈希值,用于标识浏览器。
$client_key
哈希值。只保留哈希值,使用PHP返回的值如下:"Sec-WebSocket-Accept: " . base64_encode(sha1( $client_key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true))
浏览器获得响应(示例)。这是发送密钥与websocket唯一GUID 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
连接后的sha1值。
Sec-WebSocket-Accept: r1Km05q03xuNRYy7mxkCRRgbh2M=
浏览器随后检查哈希是否与其自己的计算相匹配。如果匹配,则握手完成,远程服务器实际上是一个真正的websocket服务器,因此隧道被创建并保持活动状态。
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers
http 101 切换协议
的指令,否则它将无法工作。接受密钥 + sha1 中的 guid,在 base64 中编码。这是通用的。 - NVRM