我正在尝试从 trial.domain.com 连接到 server.domain.com 上的websocket
火狐浏览器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++;
}
这种情况是由应用安全策略的浏览器发生的,该策略阻止使用对页面自行托管的外部域的任何访问。
当您尝试从SSL区域获取从SSL区域到非SSL和另一个域的重要连接(不知道同一域是否可以解决问题(时,会发生这种情况 - 这就是您的情况。但还有更多可能的情况。
这是与浏览器相关的错误,是浏览器抛出此错误,连接本身没有问题。
您必须将 WebSockets 服务器托管在与 http 服务器相同的域下。如果这是不可能的,你可以采取几种方法:
- 如果软件供内部使用,并且可以在浏览器中进行设置以供使用,则可以禁用跨域安全策略:
- Firefox,在"about:config"下将s"ecurity.fileuri.strict_origin _policy"设置为"false"。
- Chrome,运行时带有标志"--allow-file-access-from-files">
- 如果您有权访问域的DNS设置,则可以创建子转发器,它看起来像您正在连接到同一域。不确定练习中的此选项,但它看起来不错。