Javascript SSE未捕获错误:安全错误:DOM异常18,服务器提供服务器发送事件(SSE)

Javascript SSE未捕获错误:安全错误:DOM异常18,服务器提供服务器发送事件(SSE),javascript,html,server-sent-events,Javascript,Html,Server Sent Events,我正在尝试将浏览器与提供服务器发送事件(SSE)的服务器连接。此服务器的域与原始服务器的域不同。例如,如果您调用http://d1.example.com/page此页面将尝试连接到http://d2.example.com/subscribe。尝试执行此操作将提示以下错误: 未捕获错误:安全错误:DOM异常18 在线: var source=新事件源(“http://d2.example.com/subscribe“” 我怎样才能解决这个问题 更新(我尝试过的解决方案): 1-CORS 我尝试

我正在尝试将浏览器与提供服务器发送事件(SSE)的服务器连接。此服务器的域与原始服务器的域不同。例如,如果您调用
http://d1.example.com/page
此页面将尝试连接到
http://d2.example.com/subscribe
。尝试执行此操作将提示以下错误:

未捕获错误:安全错误:DOM异常18

在线:

var source=新事件源(“http://d2.example.com/subscribe“”

我怎样才能解决这个问题

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

1-CORS

我尝试将
访问控制允许源代码:
添加到我的web服务
d2.example.com
的标题中。即使
$.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
。但即使浏览器关闭,也不会捕捉到关闭时的
事件。这是有意义的,因为d2服务器现在正在与代理服务器建立通道。如何将
on_close
事件从代理服务器转发到d2


有什么不同的方法可以实现这一点吗?

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

正如政府所说:

注意:虽然它还不是标准的一部分,但EventSource在Firefox11和更高版本中支持CORS。这有望很快成为标准


@杰克,这不是同一个问题。此问题不需要文件。一个文件非常简单,您可以将重定向规则作为最坏情况或反向代理。SSE将无法通过这些解决方案发挥作用。它无法发挥作用<代码>访问控制允许来源:d2.example.com
现在显示在响应标题中。然而
EventSource(“http://d2.example.com/subscribe“”
仍会产生相同的错误。我现在使用的是Chrome1)CORS+EventSource是standart的一部分;2) FF 11+、Opera 12+支持CORS+事件源,Chrome 25支持CORS+事件源;3) 您可以使用polyfill和CORS对EventSource的支持您有相关的来源吗?