【问题标题】:WebSocket Traffic Encoding (GZip)WebSocket 流量编码 (GZip)
【发布时间】:2012-04-21 03:48:33
【问题描述】:

StackOverflow 在所有页面上都使用 GZip 编码;他们的 websocket 流量似乎也是如此,因为它似乎完全被混淆了。

他们将如何/使用什么来实现这一目标;而是因为我的 websocket 服务器托管在没有 IIS 等的独立服务器上,所以我需要做些什么来实现同样的目标?

同样值得注意的是,http compression 也没有在他们的 websocket 连接请求中设置。


完整日志截图:http://i44.tinypic.com/19s4yr.jpg

【问题讨论】:

  • 出于兴趣,你是如何嗅探 websocket 流量的?此外,值得注意的是,上述消息的纯文本部分长 19 个字节,因此实际上可能不会被混淆。
  • @simonc 我实际上只是偶然看到它为什么要浏览日志;我会用 fiddler 上的截图来更新帖子。那会是什么,因为我的 websocket 流量是明文的。

标签: http websocket gzip


【解决方案1】:

根据 RFC6455,必须屏蔽从客户端到服务器的 WebSocket 有效负载,不得屏蔽服务器到客户端。屏蔽是通过 32 位掩码的 XORring 有效负载完成的。您在日志中看到的值。

烹饪中有一个 WS 扩展,它提供基于帧的压缩(放气)。这与掩蔽无关。每帧压缩有效的有效负载压缩有效负载,然后屏蔽有效负载(客户端到服务器)。

【讨论】:

  • 谢谢,伙计!您能否向我指出这种屏蔽实现的方向,也许是在 .net 框架上?由于在上面的屏幕截图中该值被屏蔽到客户端,因此根据规范,SO 实现是否错误?
  • 屏幕截图显示:“从浏览器收到 68 个字节 .. 消息屏蔽为真”。所以,如果那是浏览器到服务器的掩码有效载荷,那就没问题了。如果它实际上是服务器到客户端,那么它就违反了规范。规范对此很清楚:不得。
  • 掩码算法很简单:payload[i] ^= mask[i % 4],其中payload和mask是字节数组,i索引帧payload。
  • 因为字符串“reputation”是可见的,它显然没有显示异或字节。我假设正在发生的事情是将有效负载序列化为客户端/服务器可以理解的格式,例如 bson。
【解决方案2】:

我认为这里没有任何 gzip 压缩。看起来 fiddler 已经开始添加对 websockets 的支持,但它仍在进行中。

日志显示连接
...然后是 12 字节的第一条消息(461287 收件箱。初始字节 81 8C 显示一个新的、完整的文本帧,带有 4 字节掩码和 12 字节数据。提琴手正确解码。)
...然后是 19 字节的第二条消息(字节 81 93 - 流中的 19 字节 - 显示一个新的、完整的、带有 4 字节掩码和 19 字节数据的文本帧)
...然后是 19 字节的第三条消息(后面的 81 93 字节 - 流中大约 44 字节 - 显示一个新的、完整的、带有 4 字节掩码和 19 字节数据的文本帧)

【讨论】:

  • 谢谢,伙计。我可以向您展示我的 websocket 实现的日志,在该日志中可以看到全文。
  • 啊当然,我看到掩码确实是false 所以确实只是对有效负载的混淆。 i43.tinypic.com/2n8tug1.png哦和+1哈哈:)
猜你喜欢
  • 2018-02-27
  • 1970-01-01
  • 2012-10-07
  • 2015-01-17
  • 2011-08-07
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多