WebSocket


webSocket

  • WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。
  • WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
  • HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
  • WebSocket 协议本质上是一个基于 TCP 的协议。
  • 建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息"Upgrade: WebSocket"表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。
  • 可以发送文本,也可以发送二进制数据
  • 协议标识符是ws(如果加密,则为wss)ws://example.com:80/path

客户端请求

GET / HTTP/1.1
Upgrade: websocket // 必须设置 Websocket,表示希望升级到 Websocket 协议
Connection: Upgrade // 必须设置 Upgrade,表示客户端希望连接升级
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==  // 随机的字符串
Sec-WebSocket-Version: 13 // 表示支持的 Websocket 版本

服务器响应

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Location: ws://example.com/
BS