2012-04-08 110 views
6

StackOverflow的使用上的所有他们的页面的gzip编码;它们的websocket流量似乎也是如此,因为它似乎完全混淆了。的WebSocket交通编码(GZip压缩)

enter image description here

如何/什么,他们会用它来实现这一点;而是我需要做什么来实现相同,因为我的websocket服务器托管在它自己的独立服务器上没有IIS等?

值得注意过了http compression没有设置自己的WebSocket连接请求,无论是。


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

+0

出于兴趣,怎么都你嗅探websocket的流量?此外,值得注意的是,上述消息的纯文本部分长度为19个字节,因此实际上可能不会被混淆。 – simonc 2012-04-08 10:45:51

+0

@simonc我其实只是偶然看到它为什么浏览日志;不适当的更新了这个帖子,并在屏幕上显示了它在fiddler上的样子。那么怎么会呢,因为我的websocket流量是明文。 – f0x 2012-04-08 10:53:53

回答

6

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

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

+0

谢谢,队友!你是否也许可以在.net框架中向我指出这种屏蔽实现的方向?由于在我上面的屏幕截图中,该值被屏蔽到客户端,所以根据规范,SO实现是否是错误的? – f0x 2012-04-08 15:44:58

+0

屏幕截图显示:“从浏览器接收的68个字节..消息掩码为真”。所以,如果这是浏览器到服务器屏蔽的有效载荷,那么没关系。如果它实际上是服务器到客户端,那么它违反了规范。规范很明确:不可以。 – oberstet 2012-04-08 22:01:05

+0

掩码算法很简单:payload [i]^= mask [i%4],其中有效载荷和掩码是字节数组,并且我索引帧有效载荷。 – oberstet 2012-04-08 22:02:46

1

我不认为有任何这里使用gzip压缩。它看起来像小提琴手已经开始增加对websockets的支持,但它仍然是一个正在进行的工作。

日志示出了连接
...然后12个字节(461287-收件箱中。最初的字节81 8C示出了新的完整的,文本用4字节掩码和12个字节的数据帧的第一消息。提琴手正确地解码这个)
...然后的19个字节(字节81个93的第二消息。 - 19字节到流 - 展现出新的,完整的,文本与4字节的荫罩框架和19个字节的数据)
。 ..then的19个字节的第三消息(后面字节81 93 - 约44个字节到流 - 展现出新的,完整的,文本与4字节的荫罩框架和19个字节的数据)

+0

谢谢,伙计。我可以向您展示我的websocket实现的日志,其中可以看到全文。 – f0x 2012-04-08 15:45:36

+0

当然啊,我看到掩蔽确实是'假',所以确实只是有效载荷的混淆。 http://i43.tinypic.com/2n8tug1.png哦和+1哈哈:) – f0x 2012-04-08 15:48:32