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协议版本
第二步:服务器验证并响应
服务器收到升级请求后,会进行多项验证:
- 验证请求方法必须为GET
- 检查HTTP版本至少为1.1
- 确认Upgrade和Connection头部包含正确值
- 验证Sec-WebSocket-Version为支持的版本
- 检查Origin头部以确定请求来源(可选的安全验证)
如果验证通过,服务器返回HTTP 101 Switching Protocols响应,包含:
Upgrade: websocketConnection: UpgradeSec-WebSocket-Accept- 通过对客户端提供的Sec-WebSocket-Key与固定GUID字符串拼接后计算SHA-1哈希,再Base64编码生成
第三步:连接建立确认
客户端收到101响应后,会使用相同算法验证Sec-WebSocket-Accept值。如果验证成功,WebSocket连接正式建立,此时通信协议从HTTP完全切换到WebSocket协议。此后双方可以通过该连接进行全双工、低延迟的数据交换,而无需重复握手过程。
这个握手过程确保了只有支持WebSocket协议的客户端和服务器才能建立连接,同时提供了基本的安全验证机制,防止非预期的协议升级。