当客户端在Web代理后面时,我在SignalR中遇到服务器发送的事件传输问题。根据用户的经验,SignalR尝试建立serverSentEvents连接,该连接失败,因此5秒后它将回退到longPolling。我使用Chrome 38(Firefox 31 ESR也无法与SSE连接)并因其他原因禁用了webSocket传输。
显然,代理正在重写HTTP 1.1 Transfer-Encoding块(将两个块合并为一个)。 SSE的{Notes}部分spec建议"作者也应注意,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