我试图将浏览器与提供服务器发送事件(SSE)的服务器连接。该服务器具有与原始域不同的域。例如,如果您拨打http://d1.example.com/page
此页面将尝试连接到http://d2.example.com/subscribe
上的SSE频道。尝试这样做,会提示以下错误:SSE未捕获错误:SECURITY_ERR:DOM异常18与提供服务器发送事件(SSE)的服务器
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
的头部试图CORS。它没有解决EventSource
的问题,即使来自d1.example.com
的呼叫现在工作正常!我认为SSE适用于正常的HTTP请求,那么为什么它不适用于Chrome?
2-重定向
我使用的httpd服务器,所以我创建在通过上证所要求d2.example.com
d1.example.com
虚拟主机重定向规则。它与Firefox完美配合。另一方面,Chrome没有提示任何错误,也没有连接到SSE服务器。它看起来像是倾销了整个EventSource
命令。它看起来像这样的解决方案行不通,所以让我们继续前进......
3-反向代理
连接上d1.example.com/subscribe
两种浏览器,其本质上是通过反向代理连接到d2.example.com
。但是,即使浏览器关闭,也不会捕获on_close
事件。这是有道理的,因为D2服务器现在正在与代理服务器建立通道。我如何将on_close
事件从代理服务器转发到d2?
有什么不同的方法可以使这项工作?
@Jack这是不一样的问题。这个问题不需要文件。一个文件是很容易的,你可以做一个重定向规则作为最坏的情况下或反向代理。上证所不会用这些解决方案。 – wael34218