Chrome在WebSockets握手后断开连接

4
我正在尝试在我的本地机器(localhost)上运行一个简单的WebSocket示例,JavaScript和C#都能够正常运行并连接,但Chrome在握手后却断开了连接。
我已经搜索了一整个早上,我认为这可能与同源策略有关,就像另一个“问题”所建议的那样,我已将浏览器更新到最新版本(12.xxx),但是我无法找到解决方案。
在C#端,我正在使用:
ConnectionOrigin = "http://localhost:8080";
ServerLocation = "ws://localhost:8181/test";

我正在使用普通的HTML文件从磁盘直接打开(在URL栏上使用file:///)运行JavaScript。 我还尝试使用XAMPP在本地托管它,但我总是遇到相同的问题。

以下是C#程序的日志输出:

   New connection from 127.0.0.1:8181 requested. Handshaking ...
Reading handshake ...
GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506   I   2D }6 qFB  G0`@88J? 4
Sec-WebSocket-Key2: y  20   8403!24  L 5 8

Sending handshake ...
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://localhost:8080
WebSocket-Location: ws://localhost:8181/test


New connection from 127.0.0.1:8181 established.
http://localhost:8080
Data sent to the client ["Time at the server: 23-07-2011 12:57:27"]
Client disconnected.
Waiting for another connection attempt ...

1
你使用的是哪个WebSocket服务器?Chrome浏览器中(在Chrome JavaScript控制台中)出现了什么错误?此外,您显示的握手值适用于协议的Hixie-76版本,但它们是不完整的。客户端应在握手结束时发送8个随机字节。服务器应该返回基于key1、key2和来自客户端的8个随机字节的16个字节。 - kanaka
2个回答

6

针对这个请求:

GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506   I   2D }6 qFB  G0`@88J? 4
Sec-WebSocket-Key2: y  20   8403!24  L 5 8

响应必须是:

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://localhost:8181/test

the response code here

所以:

  • 第一行中应该是WebSocket而非Web Socket
  • 应该使用Sec-WebSocket-...而非WebSocket-...
  • 你没有包含响应代码,这是握手的重要部分(构造过程在规范中有描述)。
  • 此外,你应该使用\r\n而非\n(如果你还没有这样做的话)。

顺便说一句,你可能需要咨询chrome://net-internals/(打开Events标签,然后查找适当的SOCKET_STREAM),以查看Chrome实际收到的响应。


0

将以下代码中的: Handshake += "Connection: Upgrade" + Environment.NewLine; 替换为: Handshake += "Connection: Keep-Alive" + Environment.NewLine; 没有给我任何结果。 - Joao Carlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接