为什么浏览器无法与WebSocket服务器连接?

时间:2013-10-14 19:09:27

标签: websocket

我写了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'。

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

结尾
'\r' + '\n'

但它应该是

"\r\n"

就是这样。现在它有效:)