什么是WebSocket
WebSocket是一个允许Web应用程序(通常指浏览器)与服务器进行双向通信的协议。
HTML5的WebSocket API主要是为浏览器端提供了一个基于TCP协议实现全双工通信的方法。

0Bit:
FIN 结束标识位,如果FIN为1,代表该帧为结束帧(如果一条消息过长可以将其拆分为多个帧,
这时候FIN可以置为0,表示后面还有数据帧,服务器需要将该帧内容缓存起来,待所有帧都接收后再拼接到一起。控制帧不可拆分为多帧)。 ~3Bit:
RSV1~RSV3 保留标识位,以后做协议扩展时才会用到,目前该3位都为0 ~7Bit:
opcode 操作码,用于标识该帧负载的类型,如果收到了未知的操作码,则根据协议,需要断开WebSocket连接。操作码含义如下:
0x00 连续帧,浏览器的WebSocket API一般不会收到该类型的操作码
0x01 文本帧,最常用到的数据帧类别之一,表示该帧的负载是一段文本(UTF-8字符流)
0x02 二进制帧,较常用到的数据帧类别之一,表示该帧的负载是二进制数据
0x03-0x07 保留帧,留作未来非控制帧扩展使用
0x08 关闭连接控制帧,表示要断开WebSocket连接,浏览器端调用close方法会发送0x08控制帧
0x09 ping帧,用于检测端点是否可用,暂未发现浏览器可以通过何种方法发送该帧
0x0A pong帧,用于回复ping帧,暂未发现浏览器可以发送此种类型的控制帧
0x0B-0x0F 保留帧,留作未来控制帧扩展使用 8Bit:
MASK 掩码标识位,用来表明负载是否经过掩码处理,浏览器发送的数据都是经过掩码处理(浏览器自动处理,无需开发者编码),
服务器发送的帧必须不经过掩码处理。所以此处浏览器发送的帧必为1,服务器发送的帧必为0,否则应断开WebSocket连接 ~15Bit:
payload length 负载长度,单位字节如果负载长度0~125字节,则此处就是负载长度的字节数,如果负载长度在126~65535之间,
则此处的值为126,~32Bit表示负载的真实长度。如果负载长度在65536~2的64次方-1时,则此处的值为127,~80Bit表示负载的真实长度。
其中负载长度包括应用数据长度和扩展数据的长度 payload length 后面4个字节可能是掩码的key(如果掩码位是1则有这4个字节的key,否则没有,一般服务端不需要使用掩码)。 接下来就是负载的数据了,他们可能需要根据掩码的key进行编码(仅浏览器需要掩码),如果存在扩展数据,需要放在应用数据之前
客户端http报文

Upgrade: websocket
Connection: Upgrade
表示发起的是Websocket协议
Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的
Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议
Sec-WebSocket-Version 是告诉服务器所使用的 Websocket Draft(协议版本)
服务端http报文

Upgrade: websocket
Connection: Upgrade
通知客户端即将升级的是 Websocket 协议
Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key

最新文章

  1. [No000089]String的(补空位)左对齐,(补空位)右对齐
  2. EF6配合MySQL或MSSQL(CodeFirst模式)配置指引
  3. Understanding theory (1)
  4. eclipse 技巧
  5. @Component @Repository @Service @Controller
  6. 用终端直接在桌面生成text文件
  7. MongoDB的C#驱动基本使用
  8. go与json
  9. 下拉框——把一个select框中选中内容移到另一个select框中遇到的问题
  10. IDEA中Maven管理下添加mysql依赖
  11. 关于虚拟继承类的大小问题探索,VC++ 和 G++ 结果是有区别的
  12. liunx命令3
  13. Gi之(二)基础命令
  14. [Android] Android 锁屏实现与总结 (三)
  15. Java反射交换两个整型变量的值
  16. 字典树HihoCoder - 1014
  17. mysql 之各种 join 之间的关系
  18. [转]hive中自定义函数(UDAF)实现多行字符串拼接为一行
  19. 部署elasticsearch遇到的问题
  20. 百度搜索_Selenium WebDriver 环境搭建和错误调试_chromedriver_win32必须下载否则无法测试chrome

热门文章

  1. git android.google 源码:Unknown SSL protocol error in connection to code.google.com:443
  2. 【Unity】3.6 导入图片资源
  3. windows 内存管理的几种方式及其优缺点
  4. C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析
  5. GlobalConfig
  6. 【ARM】2440裸机系列-gpio按键控制
  7. 【linux】dpkg info修复及dpkg: warning: files list file for package
  8. 设置模式之单例模式(附上一个Objective-C编写的播放音乐的单例类)
  9. Upload文件时出现"Cannot access a closed file"错误
  10. 基于jQuery和CSS3炫酷图片3D旋转幻灯片特效