我不明白RFC 6455中“258 EAFA 5-E914- 47 DA-95 CA-C5 AB 0 DC 85 B11”的含义。为什么服务器需要这个魔法字符串?为什么WebSocket协议需要这种机制?
ubby3x7f1#
RFC解释了这一点。它是一个套接字,选择它是因为它“不太可能被不理解WebSocket协议的网络端点使用”。请参见RFC 6455。如果您对这种GUID格式的细节感兴趣,请参阅RFC 4122。
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协议的网络端点不太可能使用该标识符。希望这能回答你的问题。
8ljdwjyq3#
为什么WebSocket协议需要这种机制?
1.一个WebSocket连接是由浏览器请求的,简单的代码如下
new WebSocket("wss://echo.websocket.org")
从调试器中我们可以看到一个101 GET,通过检查请求头,我们可以看到这个特定的条目:
101 GET
Sec-WebSocket-Key: qcq+klmT4W41IrmG3/fseA==
这是一个唯一的哈希,用于识别浏览器。
1.在服务器端接收$client_key哈希。只保留hash值。使用PHP时,返回值如下所示:
$client_key
"Sec-WebSocket-Accept: " . base64_encode(sha1( $client_key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true))
1.浏览器返回响应(示例)。这是与258EAFA5-E914-47DA-95CA-C5AB0DC85B11 WebSocket unique 前缀连接的已发送密钥的SHA1。
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
Sec-WebSocket-Accept: r1Km05q03xuNRYy7mxkCRRgbh2M=
然后,浏览器检查哈希值是否与自己的计算相匹配,这是在后台完成的。如果是这样,握手就完成了(远程服务器实际上是一个真实的WebSocket服务器),因此隧道已经创建并保持活动。https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers
3条答案
按热度按时间ubby3x7f1#
RFC解释了这一点。它是一个套接字,选择它是因为它“不太可能被不理解WebSocket协议的网络端点使用”。请参见RFC 6455。
如果您对这种GUID格式的细节感兴趣,请参阅RFC 4122。
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协议的网络端点不太可能使用该标识符。
希望这能回答你的问题。
8ljdwjyq3#
为什么WebSocket协议需要这种机制?
1.一个WebSocket连接是由浏览器请求的,简单的代码如下
从调试器中我们可以看到一个
101 GET
,通过检查请求头,我们可以看到这个特定的条目:这是一个唯一的哈希,用于识别浏览器。
1.在服务器端接收
$client_key
哈希。只保留hash值。使用PHP时,返回值如下所示:1.浏览器返回响应(示例)。这是与
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
WebSocket unique 前缀连接的已发送密钥的SHA1。然后,浏览器检查哈希值是否与自己的计算相匹配,这是在后台完成的。如果是这样,握手就完成了(远程服务器实际上是一个真实的WebSocket服务器),因此隧道已经创建并保持活动。
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers