wae*_*218 6 javascript html5 server-sent-events
我正在尝试将浏览器与提供服务器发送事件(SSE)的服务器连接.此服务器具有与原始服务器不同的域.例如,如果您调用http://d1.example.com/page此页面,则会尝试连接到SSE频道http://d2.example.com/subscribe.尝试这样做会提示以下错误:
Uncaught Error: SECURITY_ERR: DOM Exception 18
在线上:
var source = new EventSource("http://d2.example.com/subscribe")
我该如何解决这个问题?
更新(我尝试过的解决方案):
1- CORS
我通过添加到我的Web服务的标题尝试了CORS.它没有解决问题,即使来自页面的调用现在工作正常!我认为SSE适用于普通的HTTP请求,为什么它不适用于Chrome?Access-Control-Allow-Origin:*d2.example.comEventSource$.get("http://d2.example.com")d1.example.com
2-重定向
我正在使用httpd服务器,因此我在d1.example.com虚拟主机中创建了一个重定向规则,用于将SSE请求传递给d2.example.com.它与Firefox完美配合.另一方面,Chrome没有提示任何错误,也没有连接到SSE服务器.它似乎倾倒了整个EventSource命令.看起来这个解决方案永远不会起作用,所以让我们继续......
3-反向代理
连接的两个浏览器d1.example.com/subscribe基本上d2.example.com通过反向代理连接.但on_close即使浏览器已关闭,事件也永远不会被捕获.这是有道理的,因为d2服务器现在正在使用代理服务器建立通道.如何将on_close事件从代理服务器转发到d2?
是否有任何不同的方法可以使这项工作?
这很可能是跨源资源共享的问题,您必须在相关域上启用该问题。
正如MDN所说:
注意:尽管 EventSource 尚未成为标准的一部分,但它在 Firefox 11 及更高版本中支持 CORS。预计这将很快成为标准。