我正在尝试将浏览器与提供服务器发送事件(SSE)的服务器连接。此服务器的域与原始域不同。例如,如果您调用http://d1.example.com/page,则此页面将尝试连接到http://d2.example.com/subscribe上的SSE channel 。尝试执行此操作将提示以下错误:
Uncaught Error: SECURITY_ERR: DOM Exception 18
在线上:
var source = new EventSource("http://d2.example.com/subscribe")
我该如何解决?

更新(我已经尝试过的解决方案):

1- CORS

我通过将Access-Control-Allow-Origin:*添加到Web服务d2.example.com的 header 中来尝试CORS。尽管现在EventSource页面上的$.get("http://d2.example.com")调用工作正常,但它不能解决d1.example.com问题。我以为SSE适用于正常的HTTP请求,那么为什么它不能在Chrome上运行?

2-重定向

我正在使用httpd服务器,因此我在d1.example.com虚拟主机中创建了重定向规则,该规则将SSE请求传递给d2.example.com。它与Firefox完美配合。另一方面,Chrome浏览器未提示任何错误,也未连接到SSE服务器。好像它转储了整个EventSource命令。看来此解决方案永远无法使用,所以让我们继续...

3-反向代理

两种浏览器都在d1.example.com/subscribe上连接,而d2.example.com基本上是通过反向代理连接到on_close的。但是即使关闭浏览器,也不会捕获on_close事件。这很有意义,因为d2服务器现在正在与代理服务器建立通道。如何将ojit_code事件从代理服务器转发到d2?

有什么其他方法可以使这项工作吗?

最佳答案

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

http://enable-cors.org/

正如MDN所说:

07-24 09:50
查看更多