乐闻世界logo
搜索文章和话题

Sec-WebSocket-Key的作用是什么?

5 个月前提问
3 个月前修改
浏览次数46

1个答案

1

Sec-WebSocket-Key 是 WebSocket 协议握手过程中使用的一个非常关键的HTTP头部标签,它用于帮助服务器验证连接请求是否来自合法的 WebSocket 客户端。

在 WebSocket 建立连接时,客户端会生成一个随机的字符串,并将此字符串经过 base64 编码后作为 Sec-WebSocket-Key 的值发送给服务器。这个过程如下所示:

  1. 客户端生成一个 16 字节的随机值。

  2. 客户端将这个随机值转换为 base64 格式,将其作为 Sec-WebSocket-Key 的值发送在 WebSocket 升级请求的头部。

    shell
    GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Version: 13

当服务器接收到这个请求时,它会将 Sec-WebSocket-Key 的值与特定的 GUID(全局唯一标识符,为 "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")拼接在一起。然后,服务器将这个拼接后的字符串进行 SHA-1 哈希运算,并对结果进行 base64 编码。编码后的值将作为 Sec-WebSocket-Accept 的值,返回给客户端:

shell
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

客户端接收到这个响应后,会对比原始的 Sec-WebSocket-Key 处理后的值与服务器返回的 Sec-WebSocket-Accept 是否匹配。如果一致,说明服务器是合法的,能正确理解 WebSocket 协议,从而建立安全的 WebSocket 连接。

这个处理过程防止了非法的或误导性的连接请求,并确保双方能建立一个安全可靠的通信通道。

2024年7月9日 15:48 回复

你的答案