WebSockets握手过程
字数 905 2025-11-19 12:05:12

WebSockets握手过程

WebSockets握手过程是建立WebSocket连接时客户端与服务器之间进行的初始HTTP协议升级协商。这个过程确保了双方都支持WebSocket协议,并确立了连接参数。

第一步:客户端发起升级请求
客户端(通常是Web浏览器)首先发送一个标准的HTTP请求,但此请求包含特殊的头部,表明它希望将连接升级到WebSocket协议。这个请求必须使用GET方法,并包含以下关键头部:

  • Upgrade: websocket - 明确表示希望升级到WebSocket协议
  • Connection: Upgrade - 指示此连接需要升级
  • Sec-WebSocket-Key - 一个随机生成的16字节Base64编码值,作为握手验证
  • Sec-WebSocket-Version: 13 - 指定使用的WebSocket协议版本

第二步:服务器验证并响应
服务器收到升级请求后,会进行多项验证:

  1. 验证请求方法必须为GET
  2. 检查HTTP版本至少为1.1
  3. 确认Upgrade和Connection头部包含正确值
  4. 验证Sec-WebSocket-Version为支持的版本
  5. 检查Origin头部以确定请求来源(可选的安全验证)

如果验证通过,服务器返回HTTP 101 Switching Protocols响应,包含:

  • Upgrade: websocket
  • Connection: Upgrade
  • Sec-WebSocket-Accept - 通过对客户端提供的Sec-WebSocket-Key与固定GUID字符串拼接后计算SHA-1哈希,再Base64编码生成

第三步:连接建立确认
客户端收到101响应后,会使用相同算法验证Sec-WebSocket-Accept值。如果验证成功,WebSocket连接正式建立,此时通信协议从HTTP完全切换到WebSocket协议。此后双方可以通过该连接进行全双工、低延迟的数据交换,而无需重复握手过程。

这个握手过程确保了只有支持WebSocket协议的客户端和服务器才能建立连接,同时提供了基本的安全验证机制,防止非预期的协议升级。

WebSockets握手过程 WebSockets握手过程是建立WebSocket连接时客户端与服务器之间进行的初始HTTP协议升级协商。这个过程确保了双方都支持WebSocket协议,并确立了连接参数。 第一步:客户端发起升级请求 客户端(通常是Web浏览器)首先发送一个标准的HTTP请求,但此请求包含特殊的头部,表明它希望将连接升级到WebSocket协议。这个请求必须使用GET方法,并包含以下关键头部: Upgrade: websocket - 明确表示希望升级到WebSocket协议 Connection: Upgrade - 指示此连接需要升级 Sec-WebSocket-Key - 一个随机生成的16字节Base64编码值,作为握手验证 Sec-WebSocket-Version: 13 - 指定使用的WebSocket协议版本 第二步:服务器验证并响应 服务器收到升级请求后,会进行多项验证: 验证请求方法必须为GET 检查HTTP版本至少为1.1 确认Upgrade和Connection头部包含正确值 验证Sec-WebSocket-Version为支持的版本 检查Origin头部以确定请求来源(可选的安全验证) 如果验证通过,服务器返回HTTP 101 Switching Protocols响应,包含: Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept - 通过对客户端提供的Sec-WebSocket-Key与固定GUID字符串拼接后计算SHA-1哈希,再Base64编码生成 第三步:连接建立确认 客户端收到101响应后,会使用相同算法验证Sec-WebSocket-Accept值。如果验证成功,WebSocket连接正式建立,此时通信协议从HTTP完全切换到WebSocket协议。此后双方可以通过该连接进行全双工、低延迟的数据交换,而无需重复握手过程。 这个握手过程确保了只有支持WebSocket协议的客户端和服务器才能建立连接,同时提供了基本的安全验证机制,防止非预期的协议升级。