Board logo

标题: WebSocket 协议(9) [打印本页]

作者: look_w    时间: 2019-1-15 19:48     标题: WebSocket 协议(9)

5. 使用帧去组织数据5.1 概览在 WebSocket 协议中,数据的传输使用一连串的帧。为了使得中间件不至于混淆(比如代理服务器)以及为了第 10.3 节将讨论安全原因,客户端必须将要发送到服务端的帧进行掩码,掩码将在第 5.3 节详细讨论。(注意,不管 WebSocket 有没有运行在 TLS 之上,都必须有掩码操作)服务端一旦接收到没有进行掩码的帧的话,必须关闭连接。这种情况下,服务端可以发送一个关闭帧,包含一个状态码 1002(协议错误 protocol error),相关定义在  。服务端不必对发送到客户端的任何帧进行掩码。如果客户端接收到了服务端的掩码后的帧,客户端必须关闭连接。在这个情况下,客户端可以向服务器发送关闭帧,包含状态码 1002(协议错误 protocol error),相关定义在  。(这些规则可能在将来技术说明中没有严格要求)
基础帧协议通过操作码(opcode)定义了一个帧类型,一个有效负荷长度,以及特定的位置存放 “扩展数据 Extension data” 和 “应用数据 Application data”,扩展数据和应用数据合起来定义了 “有效负荷数据 Payload data”。某些数位和操作码是保留的,为了将来的使用。
在客户端和服务端完成了握手之后,以及任意一端发送的关闭帧(在第 5.5.1 节介绍)之前,客户端可以和服务端都可以在任何时间发送数据帧。
基础帧协议这一节中将使用 ABNF 详细定义数据传输的格式。(注意,和这文档中的其他 ABNF 不同,这一节中 ABNF 操作的是一组数位。每一组数位的长度将以注释的形式存在。当数据在网络中传输时,最高有效位是在 ABNF 的最左边(大端序))。下面的文本图像可以给出关于帧的一个高层概览。如果下面的文本插图和后的 ABNF 描述发送冲突时,以插图为准。
View Code
基础帧协议通过接下来的 ABNF   来定义其形式。一个重要的注意点就是下面的 ABNF 表示的是二进制数据,而不是其表面上的字符串。比如, %x0 和 %x1 各表示一个数位,数位上的值为 0 和 1,而不是表示的字符 “0” 和 “1” 的 ASCII 编码。  没有定义 ABNF 的字符编码。在这里,ABNF 被特定了使用的是二进制编码,这里二进制编码的意思就是每一个值都被编码成具有特定数量的数位,具体的数量因不同的字段而异。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0