近期使用融云开发聊天页面, 经过抓包, 发现融云 SDK 使用 WebSocket 实现与服务端通信, 所以简单了解 WebSocket 的实现原理web
融云 SDK 文档: https://docs.rongcloud.cn/v4/ajax
一、HTTP 协议没有为了 WebSocket 的出现改变浏览器
二、WebSocket 属于 HTTP 以后的新协议安全
三、二者有交集, 也各有不一样服务器
四、WebSocket 借用 HTTP 协议完成一部分握手websocket
经过抓包融云 WebSocket 请求, 重点关注如下几个字段socket
以上为发起 WebSocekt 请求抓包, 首先关注比 HTTP 多出的数值:
性能
// 告知服务器, 发起的是 WebSocket 协议, 服务需进行 WebSocket 处理 Upgrade: websocket Connection: Upgrade
Sec-WebSocket-Key: aI0TsvW7jltfmNOF+1eSqg== // Base64, 浏览器随机生成. 与后面服务端响应的 Sec-WebSocket-Accept 配套, 提供基本的防御. 好比恶意的链接, 或者无心的链接 Sec-WebSocket-Version: 13 // 表示 websocket 的版本. 若是服务端不支持该版本, 须要返回一个 Sec-WebSocket-Versionheader, 里面包含服务端支持的版本号
再查看 Response Headers:
spa
Sec-WebSocket-Accept: OfEosYlCAcvV/jdwbW33VU0B50k= // 安全验证. 根据客户端请求首部 Sec-WebSocket-Key 计算 ( base64(sha1($Sec-WebSocket-Accept,'258EAFA5-E914-47DA-95CA-C5AB0DC85B11')) )
// 告知客户端, 已成功升级为 WebSocket Upgrade: websocket Connection: Upgrade
浏览器没有完美替代 WebSocket 的方案. 只能用 ajax 轮询
或 长轮训(long poll)
模拟, 二者都有性能问题且耗费资源code
ajax 轮询、长轮训说明:
[https://zhuanlan.zhihu.com/p/... 经过抓包, 发现融云 SDK 使用 WebSocket 实现与服务端通信, 所以简单了解 WebSocket 的实现原理
融云 SDK 文档: https://docs.rongcloud.cn/v4/
一、HTTP 协议没有为了 WebSocket 的出现改变
二、WebSocket 属于 HTTP 以后的新协议
三、二者有交集, 也各有不一样
四、WebSocket 借用 HTTP 协议完成一部分握手
经过抓包融云 WebSocket 请求, 重点关注如下几个字段
以上为发起 WebSocekt 请求抓包, 首先关注比 HTTP 多出的数值:
// 告知服务器, 发起的是 WebSocket 协议, 服务需进行 WebSocket 处理
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: aI0TsvW7jltfmNOF+1eSqg== // Base64, 浏览器随机生成. 与后面服务端响应的 Sec-WebSocket-Accept 配套, 提供基本的防御. 好比恶意的链接, 或者无心的链接
Sec-WebSocket-Version: 13 // 表示 websocket 的版本. 若是服务端不支持该版本, 须要返回一个 Sec-WebSocket-Versionheader, 里面包含服务端支持的版本号
再查看 Response Headers:
Sec-WebSocket-Accept: OfEosYlCAcvV/jdwbW33VU0B50k= // 安全验证. 根据客户端请求首部 Sec-WebSocket-Key 计算 ( base64(sha1($Sec-WebSocket-Accept,'258EAFA5-E914-47DA-95CA-C5AB0DC85B11')) )
// 告知客户端, 已成功升级为 WebSocket
Upgrade: websocket
Connection: Upgrade
浏览器没有完美替代 WebSocket 的方案. 只能用 ajax 轮询
或 长轮训(long poll)
模拟, 二者都有性能问题且耗费资源
ajax 轮询、长轮训说明:
https://zhuanlan.zhihu.com/p/25690011