WebSockets握手后Chrome断开连接

本文关键字:断开 连接 Chrome WebSockets | 更新日期: 2023-09-27 18:03:20

我试图得到一个简单的WebSocket的例子在我的机器上工作(localhost),我得到JavaScript和c#运行得很好,除了Chrome在握手后断开连接。

我整个早上都在搜索,我认为这与相同的域策略有关,正如另一个"问题"所建议的那样,我已经将浏览器更新到最新版本(12.xxx)。

但是我找不到解决问题的方法。

我在c#端使用:

ConnectionOrigin = "http://localhost:8080";
ServerLocation = "ws://localhost:8181/test";

和我运行JavaScript使用一个正常的HTML文件直接从磁盘打开(file:///在url栏上)。我也尝试过使用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 ...

WebSockets握手后Chrome断开连接

在此请求的情况下:

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实际收到的响应。

也许你必须设置Connection: keep-alive: http://en.wikipedia.org/wiki/HTTP_persistent_connection