我一直在玩服务器发送事件和等效的Polyfill for IE,并且有一个明显的例外情况。当我关闭选项卡/浏览器或重新加载页面时,客户端和服务器之间的连接将无限期地保持打开,因为我的示例SSE服务器每5秒推送一次内容。更糟糕的是,我每次都可以点击重新加载并获得新的连接,这是DOS攻击网络服务器的潜在途径,因为我可以创建大量永远不会关闭的连接。本机支持SSE的浏览器甚至依赖于polyfill的浏览器(IE除外)都不会出现这种行为。
我正在使用的示例服务器是: https://github.com/kljensen/golang-html5-sse-example/blob/master/server.go
为此网页提供服务: https://github.com/kljensen/golang-html5-sse-example/blob/master/templates/index.html
我添加了以下polyfill: https://github.com/Yaffle/EventSource/blob/master/eventsource.js
我与许多其他polyfill和服务器实现有相同的行为。我可以查看流量并查看服务器的TCP连接继续发送数据并在IE关闭后很长时间从客户端获取ACKS(至少10-30分钟,可能更长)。从调试IE,似乎调用xhr.abort()
从未实际中止/关闭连接。
我很好奇是否有其他人遇到过这个问题。从SSE的研究来看,几乎所有的消息来源都说你可以使用polyfill用于IE /不支持的浏览器,而且工作效果很好,但这似乎是一个相当严重的缺点,我很惊讶似乎没有任何信息关于这个具体问题。