WebSocket协议中“258 EAFA 5-E914- 47 DA-95 CA-C5 AB 0 DC 85 B11”是什么意思

yyhrrdl8  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(171)

我不明白RFC 6455中“258 EAFA 5-E914- 47 DA-95 CA-C5 AB 0 DC 85 B11”的含义。为什么服务器需要这个魔法字符串?为什么WebSocket协议需要这种机制?

ubby3x7f

ubby3x7f1#

RFC解释了这一点。它是一个套接字,选择它是因为它“不太可能被不理解WebSocket协议的网络端点使用”。请参见RFC 6455
如果您对这种GUID格式的细节感兴趣,请参阅RFC 4122

b1zrtrql

b1zrtrql2#

关于Quora answer
没有理由选择魔术师。之所以选择这个特殊的魔术字符串,是为了给WebSockets协议增加某种程度的完整性,因为这个字符串是 * 全局唯一的 *。
RFC(RFC 6455 - The WebSocket Protocol)只说:
.将其与字符串形式的全局唯一标识符(Globally Unique Identifier,RFC4122(https://www.rfc-editor.org/rfc/rfc4122))“258 EAFA 5-E914- 47 DA-95 CA-C5 AB 0 DC 85 B11”连接起来,不了解WebSocket协议的网络端点不太可能使用该标识符。
希望这能回答你的问题。

8ljdwjyq

8ljdwjyq3#

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

1.一个WebSocket连接是由浏览器请求的,简单的代码如下

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

从调试器中我们可以看到一个101 GET,通过检查请求头,我们可以看到这个特定的条目:

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

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

1.在服务器端接收$client_key哈希。只保留hash值。使用PHP时,返回值如下所示:

"Sec-WebSocket-Accept: " . base64_encode(sha1( $client_key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true))

1.浏览器返回响应(示例)。这是与258EAFA5-E914-47DA-95CA-C5AB0DC85B11 WebSocket unique 前缀连接的已发送密钥的SHA1。

Sec-WebSocket-Accept: r1Km05q03xuNRYy7mxkCRRgbh2M=

然后,浏览器检查哈希值是否与自己的计算相匹配,这是在后台完成的。如果是这样,握手就完成了(远程服务器实际上是一个真实的WebSocket服务器),因此隧道已经创建并保持活动。
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers

相关问题