跨域Websocket连接导致NS_ERROR_DOM_SECURITY_ERR

时间:2012-04-26 11:34:28

标签: firefox websocket

我正在尝试从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++;
}

1 个答案:

答案 0 :(得分:4)

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

这是与浏览器相关的错误,是浏览器抛出此错误,并且连接没有问题。

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

  1. 如果软件用于内部使用并且浏览器中的设置可以使用,则可以禁用跨域安全策略:
    • Firefox,在“about:config”下设置“ecurity.fileuri.strict_origin _policy”为“false”。
    • Chrome,使用标记“--allow-file-access-from-files”
    • 运行
  2. 如果您可以访问域的DNS设置,则可以创建子转发器,看起来您将连接到同一个域。在实践中不确定这个选项,但它看起来很好。