“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”在WebSocket协议中意味着什么

问题描述 投票:0回答:3

我不明白RFC 6455中“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”的含义。 为什么服务器需要这个神奇的字符串? 而为什么WebSocket协议需要这种机制呢?

websocket guid magic-string
3个回答
33
投票

RFC 对此进行了解释。它是一个 GUID,选择它是因为“不太可能被不理解 WebSocket 协议的网络端点使用”。请参阅RFC 6455

如果您对此类 GUID 的格式细节感兴趣,请参阅 RFC 4122


8
投票

来自Quora的回答

选择魔弦没有理由。选择特定的魔术字符串 GUID 是为了向 WebSockets 协议添加一定程度的完整性,因为该字符串是全局唯一的

RFC(RFC 6455 - WebSocket 协议)只说:

...将其与全局唯一标识符(GUID, [RFC4122]) 字符串形式的“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”, 这不太可能被不这样做的网络端点使用 了解 WebSocket 协议。

希望能回答您的问题。


5
投票

为什么WebSocket协议需要这个机制?


  1. 浏览器请求 WebSocket 连接,只需使用以下代码

new WebSocket("wss://echo.websocket.org")

从调试器中我们可以看到一个

101 GET
,通过检查请求标头,我们可以看到这个特定的条目:

Sec-WebSocket-Key: qcq+klmT4W41IrmG3/fseA==

这是一个唯一的哈希值,用于识别浏览器。


  1. 在服务器端接收
    $client_key
    哈希值。仅保留哈希值。使用 PHP,返回值如下所示:
"Sec-WebSocket-Accept: " . base64_encode(sha1( $client_key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true))
  1. 浏览器返回响应,(示例)。这是与
    258EAFA5-E914-47DA-95CA-C5AB0DC85B11
    WebSocket unique GUID 连接的发送密钥的 SHA1。
Sec-WebSocket-Accept: r1Km05q03xuNRYy7mxkCRRgbh2M=

浏览器然后检查哈希值是否与他自己的计算相匹配,这是在后台完成的。如果是这样,则握手完成(远程服务器实际上是真正的 WebSocket 服务器),因此隧道已创建并保持活动状态。


https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers

© www.soinside.com 2019 - 2024. All rights reserved.