WebSocket的握手过程

举报
8181暴风雪 发表于 2025/01/21 20:03:37 2025/01/21
123 0 0
【摘要】 WebSocket的握手过程是建立WebSocket连接的第一步,它允许客户端和服务器协商并建立一个持久的连接,用于后续的双向通信。以下是WebSocket握手过程的详细解释:1. WebSocket握手初始化握手过程由客户端发起,通过发送一个标准的HTTP请求到服务器,这个请求与普通的HTTP请求不同,它包含了额外的头信息,表明这是一个WebSocket握手请求。2. 握手请求的关键头信息...

WebSocket的握手过程是建立WebSocket连接的第一步,它允许客户端和服务器协商并建立一个持久的连接,用于后续的双向通信。以下是WebSocket握手过程的详细解释:

1. WebSocket握手初始化

握手过程由客户端发起,通过发送一个标准的HTTP请求到服务器,这个请求与普通的HTTP请求不同,它包含了额外的头信息,表明这是一个WebSocket握手请求。

2. 握手请求的关键头信息

以下是一些在WebSocket握手请求中常见的头信息:

  • Upgrade: 这个头信息必须设置为​​websocket​​,表示客户端希望升级到WebSocket协议。
  • Connection: 这个头信息必须设置为​​Upgrade​​,表示客户端想要升级协议。
  • Sec-WebSocket-Key: 这是一个Base64编码的随机值,服务器将使用这个值来构造一个响应,以证明它理解WebSocket协议。
  • Sec-WebSocket-Version: 这个头信息指示了客户端希望使用的WebSocket协议版本。

3. 握手请求示例

GET /ws HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

4. 服务器响应

如果服务器支持WebSocket协议,它会同意升级协议,并通过以下步骤响应:

  • 确认​​Upgrade​​​和​​Connection​​头信息。
  • 返回一个​​Sec-WebSocket-Accept​​​头信息,这个值是通过将客户端发送的​​Sec-WebSocket-Key​​​与一个固定的字符串​​258EAFA5-E914-47DA-95CA-C5AB0DC85B11​​拼接,然后进行SHA-1散列,最后进行Base64编码得到的。
  • 可选地返回​​Sec-WebSocket-Protocol​​头信息,如果客户端请求了特定的子协议。

5. 握手响应示例

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

6. 握手完成

一旦客户端接收到服务器的响应,并且确认​​Sec-WebSocket-Accept​​值是正确的,握手过程就完成了。此时,客户端和服务器之间的连接已经从HTTP升级为WebSocket,双方可以开始通过这个连接发送WebSocket消息。

7. 注意事项

  • 握手必须是一个有效的HTTP请求。
  • 服务器必须遵守RFC 6455中定义的安全要求,包括对​​Sec-WebSocket-Key​​的正确处理。
  • 如果握手失败,服务器应该返回一个常规的HTTP响应,而不是WebSocket握手响应。 通过这个过程,WebSocket协议确保了客户端和服务器之间的通信是安全且双方都认可的,为后续的实时数据交换奠定了基础。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。