数据编码在新协议握手hybi-10
Data encoding in new protocol handshake hybi-10
我使用python和javascript的WebSocket,直到现在Google Chrome的握手协议是hybi-00草案。我猜Google Chrome最近把协议改成了hybi-10草案。
所以今天我更新了握手代码,现在WebSocket成功创建并打开了。在JavaScript的onopen事件中,我发送了一个简单的文本消息:
viz.ws = new WebSocket("ws://127.0.0.1:5500");
viz.ws.onopen = function() {
viz.ws.send("TEST'n");
};
我的Python服务器接收这个数据。然而,它以某种方式编码,我无法获得我发送的简单文本"TEST'n"
:
def recv_data(self, client, count):
try:
data = client.recv(count)
except:
return False
print data
print data.decode('utf-8','ignore')
return data.decode('utf-8', 'ignore')
打印返回如下:
üàÍu┬¯é0æ║▄
u0
它们总是不同的,但是发送的文本总是TEST'n
。
同样,服务器接收到这个数据,但是客户端没有接收到来自服务器的任何数据。
我读到hybi-10使用二进制文件…我是否在该代码中丢失了数据转换?抱歉,我对WebSockets很陌生,这些协议让我很困惑。
数据在HyBi (HyBi-00实际上是hyxie -76)中的框架方式发生了重大变化。新的框架格式如下图所示。
同样,对于从客户端发送到服务器的数据,数据是被屏蔽的。掩码是帧有效载荷的前4个字节,并使用以下简单算法进行解码(实际上是编码):
data[i] = data[i] XOR mask[j MOD 4]
每一帧的掩码密钥是不同的,这就是为什么你每次都得到不同的有效载荷,即使你发送相同的数据。
如果客户端没有接收到你发送的数据,很可能是你没有正确地帧数据。另外请注意,Chrome 14和Firefox 6/7还不支持二进制数据,所以操作码需要为1来表示文本(UTF-8)帧。
相关文章:
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 如何处理10页以上的静态页眉/页脚
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 在不设置协议的情况下,使用javascript/jquery更改iframe-src
- 如何每10.6秒从时间戳增加+1
- 删除DataTable(1.10.8)后,删除的行将再次添加
- Datatable get列值只给出前10行
- 生成随机数10次
- 是否可以通过Chrome扩展内容脚本打开Chrome外部协议请求
- 定时循环,间隔10秒
- 如何jQuery-Add按钮最多插入10个新输入
- 数据表1.10,第列.转发器使用情况
- 如何在node.js中只下载文件的前10 KB
- Node.js错误“;ReferenceError:全局未定义“;在从0.10.2更新到0.12.2之后
- 正在加载+10个帖子
- 复选框“全部”不适用于Jquery DataTable 1.10.5版本
- 无法在Windows 10 Cordova应用程序中从Web视图进行ajax调用
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- 数据编码在新协议握手hybi-10
- 在iOS 10中尝试发送短信时,显示“sms”;协议破裂