javascript - SSE 未捕获错误 : SECURITY_ERR: DOM Exception 18 with a server that provides Server Sent Events (SSE)

标签 javascript html server-sent-events

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

Uncaught Error :SECURITY_ERR:DOM 异常 18

在线:

var source = new EventSource("http://d2.example.com/subscribe")

我该如何解决?

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

1-CORS

我试过了 CORS通过将 Access-Control-Allow-Origin:* 添加到我的网络服务 d2.example.com 的 header 中。它没有解决 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 事件永远不会被捕获,即使浏览器已关闭。这是有道理的,因为 d2 服务器现在正在与代理服务器建立 channel 。如何将 on_close 事件从代理服务器转发到 d2?

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

最佳答案

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

http://enable-cors.org/

作为MDN说:

Note: Although it's not yet part of the standard, EventSource supports CORS in Firefox 11 and later. This is expected to become standard soon.

关于javascript - SSE 未捕获错误 : SECURITY_ERR: DOM Exception 18 with a server that provides Server Sent Events (SSE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049810/

相关文章:

javascript - 如何将代码添加到 &lt;script&gt; &lt;/script&gt; 中

javascript - 鼠标滚轮事件太快。如何禁用它

javascript - 为什么 For 循环不能使用 keyup 函数在 javascript 中工作?

javascript - 在俄罗斯方 block 之类的游戏中,碰撞后物体不显示

android - 从 Android 应用程序接收服务器发送的事件

javascript - Raphael.js - if/else 语句在点击时不切换

javascript - JQuery .on 'change' 事件不会因部分 View 内的下拉菜单而被触发

html - CSS - 使容器大小适合内容,移除未使用的空间

javascript - 在 Node JS 中使用服务器发送事件未在客户端接收数据

javascript - 为什么 onmessage 监听器不处理初始 SSE 事件?