-1

我写了 Websocket 服务器。我认为它会返回一切美好的东西,也许我会错过一些东西。这是浏览器发送给它的内容:

GET /app HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: pm.local:4444
Origin: http://pm.local
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: dkX2mQo3cBVA0DMQ7m9oTw==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36

并且服务器发送该响应:

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://pm.local
Sec-WebSocket-Location: http://pm.local/app
Sec-WebSocket-Accept: KrfNVY/hsidqg2HX7YBdXHD/SQM=
Sec-WebSocket-Protocol: sample
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Origin: http://pm.local

当然,最后它总是发送'\r\n'。

你知道这个回复有什么问题吗?感谢帮助

4

3 回答 3

0

Sec-WebSocket-Location 应该类似于ws://[host]/[uri],以“ws”而不是“http”开头。

于 2013-10-16T03:02:03.747 回答
0

请从响应中删除 Sec-WebSocket-Protocol 标头。当客户端没有发送header时,包含它是无效的。

还请删除 Sec-WebSocket-Location 标头。这是旧规格的东西。未在 RFC 6455 中使用。

于 2013-10-21T16:05:44.237 回答
0

感谢您的帮助,但我在代码中发现了一个“错误”。我用 Java 编写了服务器,响应的每一行都以

'\r' + '\n'

但应该是

"\r\n"

就是这样。现在它可以工作了:)

于 2013-10-21T20:17:22.133 回答