0

当客户端位于 Web 代理之后时,我在 SignalR 中传输服务器发送的事件时遇到问题。根据用户的经验,SignalR 尝试建立 serverSentEvents 连接,但失败了,所以 5 秒后它回退到 longPolling。我正在使用 Chrome 38(Firefox 31 ESR 也无法与 SSE 连接)并且由于其他原因禁用了 webSocket 传输。

显然,代理正在重写 HTTP 1.1 传输编码块(将两个块合并为一个)。SSE规范的注释部分建议“还警告作者,HTTP 分块可能对该协议的可靠性产生意想不到的负面影响。” 所以,现在这是我最好的猜测。哦,当我在 SingalR JavaScript 客户端的 EventSource 消息事件处理程序中设置断点时,它永远不会被命中。

任何人都可以确认这种分块更改可能是连接断开的原因吗?

有什么方法可以仅针对此传输禁用服务器端的分块吗?

下面是对 GET /signalr/connect 请求的 TCP 响应:

从服务器发送:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/event-stream
Expires: -1
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 05 Nov 2014 15:49:29 GMT

13
data: initialized


2f
data: {"C":"d-3B309D97-E,1|F,0","S":1,"M":[]}


0

客户收到的:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/event-stream
Expires: -1
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 05 Nov 2014 15:49:29 GMT

42
data: initialized

data: {"C":"d-3B309D97-E,1|F,0","S":1,"M":[]}


0
4

0 回答 0