我写了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'。
你知道这个回答有什么问题吗? 谢谢你的帮助
答案 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"
就是这样。现在它有效:)