>[danger]二面:WebSocket握手 WebSocket 握手的详细过程如下: 1. 客户端发起握手请求: - 客户端通过普通的 HTTP GET 请求向服务器发起 WebSocket 握手请求。请求头中包含了一些关键的字段,例如: ``` GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 ``` - `Upgrade: websocket` 表示客户端希望升级到 WebSocket 协议,`Connection: Upgrade` 表示连接升级的意图。 - `Sec-WebSocket-Key` 是一个经过 Base64 编码的随机值,用于确保安全性。 2. 服务器响应握手请求: - 服务器收到客户端的握手请求后,进行相应的处理并返回一个 HTTP 101 切换协议的响应。响应头中包含了类似以下的字段: ``` HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= ``` - `Upgrade: websocket` 和 `Connection: Upgrade` 告知客户端服务器正在切换到 WebSocket 协议。 - `Sec-WebSocket-Accept` 是由客户端发送的 `Sec-WebSocket-Key` 经过一定算法计算得出的值,用于确认握手请求的合法性。 3. 客户端和服务器完成握手: - 客户端收到服务器的 101 切换协议响应后,表示握手成功,连接升级为 WebSocket 协议。 - 此时,客户端和服务器之间的通信将不再遵循 HTTP 协议,而是遵循 WebSocket 协议进行双向通信。 4. 建立 WebSocket 连接: - 客户端和服务器现在已经建立了 WebSocket 连接,双方可以通过该连接进行实时的双向通信,而无需像 HTTP 那样频繁地发起请求和响应。 总的来说,WebSocket 握手的过程是通过普通的 HTTP 请求-响应来完成的,但是在握手过程中,客户端和服务器协商切换到 WebSocket 协议,从而建立起全双工、低延迟的持久连接,实现了更高效的实时通信。