大家好,提前感谢,
根据 RFC 6455,我正在 C++ 中滚动我自己的 WebSocket 服务器(我今天早上也在 C# 中快速滚动了一个以仔细检查这里发生了什么)
我已经阅读了标准,现在我有一个服务器可以成功地与客户端建立连接。我可以完成握手,并从另一端正确接收的简单测试客户端发送数据。
在使用 FireFox/JS 测试向我的服务器发送数据时,我在服务器端收到一堆乱码。我已经使用 WireShark 监控了套接字,并确定服务器正在正确接收数据,但是我无法解释它。
我正在尝试将字符串“test”(不带引号)发送到我的服务器,最后一次尝试看起来像这样:
0x81
0x84
0x1e
0x31
0x65
0xaf
0x6a
0x54
0x16
0xdb
这些字符中的大多数甚至都不是可打印的字符,并且每次我单击发送时,这些值都会发生变化(除了0x81
始终是第一个字符。注意:这是在尝试按照规范修剪0x00
和填充之前。0xFF
在 FireFoxs 握手请求中,它确实指定了 Accept-Encoding,如下所示:
Accept-Encoding: gzip, deflate
但是,我尝试使用 GZIP 和 DEFLATE 解压缩,都抛出错误。我还尝试将 Lorem Ipsum 发送到服务器,结果相同(0x81 后跟一堆字符)
任何人都可以对此有所了解吗?这实际上是压缩的吗?为什么每次发送相同的字符串都会给出不同的结果?FireFox 是否为传出数据添加时间戳?我想要的只是将服务器端的字符串正确解释回“测试”
这是来自 FireFox 的完整请求:
GET / HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: null
Sec-WebSocket-Key: lXen8aJPlv/0JOZBb4WAtA==
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
这是我的服务器的完整回复:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: WHTW6PSJ/pWIPskBw0owBT/jacw=
这是成功的,即使在 javascript 结束时我也得到了 OPEN,然后当我单击一个按钮调用 send("test") 时,我收到了上面第一个代码块中显示的垃圾......