几个月来,我一直在使用websockets,没有任何问题在Chrome和我的本地主机应用程序之间进行通信。 突然之间,使用最新版本的Chrome,数据无法干净地通过。
在Chrome扩展程序的javascript中,代码的相关部分是:
window.ws = new WebSocket("ws://localhost:13000/");
window.ws.onopen = function () {
window.ws.send('GO');
在我的 C# 应用中:
string msg = ASCIIEncoding.UTF8.GetString(buffer);
Debug.WriteLine(msg);
几个月来,这工作得很好,我会日复一日地"去"回来。现在我在接收缓冲区上得到的是 4 个字节{114,247,7,0)
它不会在我能找到的任何编码中转换为"GO"。有人知道会发生什么吗?我很困惑,因为我没有触及代码的任何一端(chrome 或侦听器)。
干杯!
PS:完整的Chrome版本19.0.1084.15 beta-m
通了。事实证明,Chrome 只是默认在 websocket 上启用了压缩。我只需要修改我这边的 websocket 服务器以拒绝该扩展程序,Chrome 就会恢复为纯文本。
阅读一些关于屏蔽的数据。浏览器可能会在启用掩码的情况下发送消息,它会在帧中添加额外的 4 个字节,以对您的消息应用屏蔽。浏览器可能启用或禁用它,因此在服务器端,您应该同时支持两者,如果帧包含启用屏蔽位,则应使用屏蔽。
了解如何基于 RFC 6455 应用屏蔽