5

我正在尝试从 trial.domain.com 连接到 server.domain.com 上的 websocket

Firefox 中的 NS_ERROR_DOM_SECURITY_ERR:

"[Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "https://trial.domain.com/home Line: 454"]"

当我尝试建立 WebSocket 连接时:

try {
  if (window['MozWebSocket'] !== undefined) {
    socket = new MozWebSocket('ws://server.domain.com/chat');
  } else {
    socket = new WebSocket('ws://server.domain.com/chat');
  }
  trails = 0;
} catch(err){
  trials++;
}
4

1 回答 1

4

这由正在应用安全策略的浏览器发生,该安全策略阻止使用对页面自身托管的外部域的任何访问。
这发生在您尝试从 SSL 区域获取重要连接到非 SSL 和另一个域(不知道同一个域是否会解决问题)的情况下 - 这就是您的情况。但是还有更多可能的情况。

这是浏览器相关的错误,是浏览器抛出这个错误,自己连接没有问题。

您必须将 WebSockets 服务器托管在与 http 服务器相同的域下。如果这是不可能的,您可以采取以下几种方法:

  1. 如果软件是供内部使用的,并且可以在浏览器中进行设置以供使用,那么您可以禁用跨域安全策略:
    • Firefox,在“about:config”下将 s“ecurity.fileuri.strict_origin _policy”设置为“false”。
    • Chrome,使用标志“--allow-file-access-from-files”运行
  2. 如果您有权访问域的 DNS 设置,则可以创建子转发器,看起来您正在连接到同一个域。在练习中不确定这个选项,但它看起来不错。
于 2012-04-26T15:37:38.507 回答