首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSocket协议二进制数据加密

WebSocket协议二进制数据加密
EN

Stack Overflow用户
提问于 2013-01-31 21:25:42
回答 5查看 3.9K关注 0票数 7

我正在编写基于WebSocket协议的服务器和客户端.

服务器是使用Python和Twisted制作的。

目前,我可以将二进制数据从服务器发送到客户端和客户端,唯一的问题是,根据某些来源,浏览器发送的二进制数据是基于机器endianness的。我想确定这是真的吗?

如果是真的,那么我是否应该以某种方式检查endianness客户端拥有什么,并使用他的endianness从/向他读取/发送数据?检查客户端状态的最佳方法是什么,只需从客户端发送

代码语言:javascript
复制
var view_buffer = new UInt8Array(new ArrayBuffer(1));
view_buffer[0] = 1;

这些数据,并检查服务器是否返回1或128?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-31 21:31:59

要检查endianess,需要发送至少两个字节的值。

您不能仅仅通过发送一个字节来进行检查,因为在这一点上已经为您排序了位级sending。

因此,只有在字节交换(如果需要的话)和试图使用特定于endian的规则打包单个位时,例如在C中使用位字段时,才需要使用endian。

如果您的问题涉及您自己在WebSocket有效负载中携带的消息,通常的过程是自己选择一个字节顺序,然后执行从本机字节顺序转换为首选字节顺序所必须做的任何打包或解压缩。我所知道的大多数协议都使用大端,也就是“网络秩序”。

因此,如果您有一个16位的值,将其转换为两个8位字节,自己使用移位和位运算符,然后发送顶部的字节,然后是第二个字节。在服务器端,反转该进程。大多数服务器端语言使得从网络顺序到本机字节顺序的字节交换值变得非常容易。

票数 1
EN

Stack Overflow用户

发布于 2013-01-31 21:31:04

根据RFC 6455

多字节长度量以网络字节顺序表示。

网络字节顺序是大端。服务器和客户端都应该使用这个字节顺序,不管它们的本机顺序是什么。

模块中,可以使用'>'说明符来确保正确的字节顺序。我不知道在Javascript里会怎么做。

票数 9
EN

Stack Overflow用户

发布于 2013-01-31 21:28:27

Endianess只适用于由多个字节组成的数据类型。因为您使用的是一个uint8数组,所以不重要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14635427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档