6

我正在尝试将浏览器与提供服务器发送事件 (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?

是否有任何不同的方法可以使这项工作?

4

1 回答 1

4

这是一个跨域资源共享问题的可能性很高,您必须在相关域上启用它。

http://enable-cors.org/

正如MDN所说:

注意:虽然它还不是标准的一部分,但 EventSource 在 Firefox 11 及更高版本中支持 CORS。预计这将很快成为标准。

于 2012-12-27T06:23:08.230 回答