WebSocket
2019-05-24 本文已影响0人
NapoleonY
概述
WebSocket 协议被设计用来取代现有使用 HTTP 作为传输层的双向通信技术,并受益于现有的基础设施(代理、过滤、身份验证),协议包含两部分:握手,数据传输
握手
客户端申请 协议升级
客户端发起协议升级请求,可以看到采用的是标准的 HTTP 报文格式,并且只支持 GET
GET / HTTP/1.1
Host: localhost:8080
Origin: http://127.0.0.1:3000
Connection: Upgrade // 协议升级
Upgrade: websocket // 要升级到 WebSocket 协议
Sec-WebSocket-Version: 13 // websocket 的版本。如果服务端不支持该版本,需要返回一个 Sec-WebSocket-Versionheader ,里面包含服务端支持的版本号
Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw== // 确保服务器不接受来自非 WebSocket客户端的连接,与后面服务端响应首部的 Sec-WebSocket-Accept 是配套的,提供基本的防护,比如恶意的连接,或者无意的连接
响应协议升级
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU= // 根据客户端请求首部的 Sec-WebSocket-Key 计算出来
数据帧
WebSocket 最小的通信单位为 帧(frame)
屏幕快照 2019-05-24 17.26.12.png
opcode:操作代码,决定了如何解析后续的 data payload
数据传递
问题
- 与 TCP、HTTP 的关系
WebSocket 是基于 TCP 的独立的协议,只是通过 HTTP 进行握手
HTTP 发送 Request ,必须有对应的 Response,而且 Response 是被动的,Websocket 数据格式轻量,开销小,