当客户端位于 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