特点
- 应用层协议(七层);
- 全双工通信(双向);
- 长连接;
WebSocket连接建立过程
- 客户端发送建立连接请求;
客户端通过Http发送协议升级请求(增加特殊头信息Upgrade:WebSocket),如下所示:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
- 服务端返回ACK响应;
服务端解析头信息,如果确认支持WebSocket协议,则返回如下响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
使用注意
Http协议升级成为WebSocket协议的关键是“Upgrade”头信息,如果中间链路存在七层代理设备,且不识别Upgrade头部,会导致转发时Upgrade头部信息丢失,协议升级失败;
Nginx支持WebSocket
- Nginx版本:nginx-1.3.13以上;
- 增加配置项,
location /ide.ws {
proxy_read_timeout 1800s;
proxy_redirect off;
proxy_pass http://127.0.0.1:8111;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}