美文网首页
websocket协议

websocket协议

作者: 只争朝夕々 | 来源:发表于2019-12-17 09:06 被阅读0次

协议分为2部分:握手和数据传输


握手

  • 客户端握手请求头信息
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
Sec-WebSocket-Extensions: compression
Authorization: access_token

相关说明
1.必须是GET请求,且HTTP版本号大于等于 1.1
2.Host字段必须有值
3.Upgrade字段必须有值,且为websocket
4.Connection字段必须有值,且为Upgrade
5.Sec-WebSocket-Key的值是随机生成的16位数字,然后被base64编码后的值
6.Origin如果为浏览器环境,则该值必填
7.Sec-WebSocket-Protocol如果存在,该值表示一个或多个用逗号分割的客户端想要表达的子协议,按优先顺序排列
8.Sec-WebSocket-Version该字段的值必须是13
9.Sec-WebSocket-Extensions如果存在,该字段的值表示客户端需要服务端支持的扩展协议
10.请求头还可以包含任意其他头字段,例如cookieAuthorization等头字段

  • 服务端握手响应头信息
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Extensions: compression

相关说明
1.Upgrade字段必须有值,且为不区分大小写的ASCII匹配值websocket
2.Connection字段必须有值,且为不区分大小的ASCII匹配值Upgrade
3.Sec-WebSocket-Accept必须有值,且为客户端请求的Sec-Weboscket-Key字段值,去除首尾空白字符,然后与固定标识符258EAFA5-E914-47DA-95CA-C5AB0DC85B11连接,接着sha1,最后base64加密后的值
4.Sec-WebSocket-Protocol如果存在,表示服务端支持的子协议,该值必须是客户端头信息Sec-WebSocket-Protocol中出现的值
5.Sec-WebSocket-Extensions如果存在,表示服务端支持的扩展协议,该值必须是客户端头信息Sec-WebSocket-Extensions中出现的值


数据传输

基于frame进行数据传输,对bit进行了分组。下图为数据传输的格式

image.png

相关说明
1.FIN占据1bit,指示该条消息是否是最终帧,值为1是,表示是最终帧
2.RSV1RSV2RSV3各1个bit,值必须是0,除非有对应的扩展协议
3.opcode占据4bit,定义了对"负载数据"的解释,目前有如下值:0x0连续帧、0x1文本帧、0x2二进制帧、0x3-0x7保留帧、0x8连接关闭帧、0x9ping帧、0xApong帧、0xB-0xF保留的控制帧
4.MASK,占据1bit,定义"负载数据"是否已被掩码处理,值为1表示已被掩码处理。客户端发送给服务端的数据都需要设置为1
5.Payload len指有效载荷长度,占据7/7+16/7+64 bit,长度以字节为单位。如果值为0-125,该值等于负载数据长度。如果值为126,之后的两字节解释为一个16位的无符号整数,该值等于负载数据长度。如果127,之后的8字节解释为一个64位的无符号整数,该值等于负载数据长度。多字节长度数量以网络字节顺序(大端字节序)来排序表示
6.Masking-key掩码的key,占据0/4 byte。客户端发送到服务器的所有帧通过一个包含在帧中的32bit(4byte)值来掩码。如果MASK位设置为1,则该字段存在,如果MASK位设置为0,则该字段缺失
7.Payload Data有效载荷数据,等于 扩展数据+应用数据

相关文章

  • 好程序员web前端培训分享WebSocket协议

    好程序员web前端培训分享WebSocket协议,WebSocket协议简介 一.WebSocket协议简介 1....

  • 1.解释WebSocket,socketio

    1.解释WebSocket,socketio WebSocket:是一个标准网络传输协议 WebSocket协议是...

  • python之websocket

    一、websocket WebSocket协议是基于TCP的一种新的协议。WebSocket最初在HTML5规范...

  • 在tornado中使用WebSocket

    什么是WebSocket WebSocket是一种网络通信协议,与Http协议不同的是,WebSocket 连接允...

  • 基于koa的前后端分离的socket.io使用

    1、websocket websocket是html5出的协议,它是基于TCP协议,利用http协议建立连接,实现...

  • 2.WebSocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • WebSocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • websocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • WebSocket SSL 加密浅析

    1 WebSocket 原理 1.1 背景 WebSocket 是基于Http 协议的改进,Http 为无状态协议...

  • SRWebSocket源码解析

    WebSocket协议 中文翻译的WebSocket协议 SRWebSocket 一. 初始化 二. 建立连接 开...

网友评论

      本文标题:websocket协议

      本文链接:https://www.haomeiwen.com/subject/qeudnctx.html