1 WebSocket本质上是一种计算机网络应用层的协议,用来弥补HTTP协议在持久通信能力上的不足,它的握手是以HTTP的形式发起的,通过第一个request建立连接,之后交换的数据都不需要发送HTTP header就能交换数据。
客户端开始建立 WebSocket 连接时要发送一个 header 标记了 Upgrade 的 HTTP 请求,表示请求协议升级。
所以服务器端做出响应的简便方法是,直接在现有的 HTTP 服务器软件和现有的端口上实现 WebSocket 协议,重用现有代码(比如解析和认证这个 HTTP 请求。如果在 TCP 协议上实现,这两个功能就要重新实现),然后再回一个状态码为 101 的 HTTP 响应完成握手,再往后发送数据时就没 HTTP 的事了。
客户端发送的数据格式如下:
GET /webfin/websocket/ HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://localhost:8080Sec-
WebSocket-Version: 13