WebSocket连接是如何建立的,描述一下WebSocket的握手过程。
时间: 2024-09-25 07:01:15 浏览: 11
WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据而不仅仅是响应客户端请求。WebSocket的握手过程通常被称为“握手”或“协商”,分为以下几个步骤:
1. **客户端发起连接**:客户端首先发送一个HTTP升级请求到服务器,其中包含`Upgrade`字段设置为`websocket`,以及`Connection`头信息设置为`Upgrade`, `Sec-WebSocket-Key`用于生成WebSocket协议特定的随机字符串。
示例请求:
```
GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13
Host: example.com
```
2. **服务器响应**:服务器收到这个请求后,如果支持WebSocket,会返回一个HTTP状态码为101(切换协议),同时添加新的头部信息,如`Upgrade`、`Connection`、`Sec-WebSocket-Accept`等。
示例响应:
```
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Server: ws server
```
这里的`Sec-WebSocket-Accept`是根据客户端提供的`Sec-WebSocket-Key`通过一个特定算法(通常是基于SHA-1哈希函数)计算得到的。
3. **连接确认**:客户端接收到服务器响应后,会关闭原有的HTTP连接,并在新的WebSocket连接上发送一个空的数据帧作为连接确认。
4. **双向通信开始**:从此刻起,客户端和服务器就可以在WebSocket连接上自由地发送和接收数据,无需每次操作都经历整个握手过程。