我目前正在 IE10(在 Windows 8 上)下开发一个网站,使用 JavaScript 中的 WebSockets。它在 Firefox 18 和 Chrome 25 下运行良好,但在 IE10 上建立连接时出现 SecurityError。
我正在做的事情看起来很简单:
websocket = new WebSocket('wss://hello.dev.mydomain.net');
但 IE 不喜欢它:
SCRIPT5022: SecurityError
剧本是在“https://test.dev.mydomain.net https://test.dev.mydomain.net“(显然不是真实地址)。
令我困扰的是,如果我只需双击本地计算机上的文件(例如 file://...)它就可以工作。更糟糕的是:如果我使用fiddler监控 HTTP 流量...它也有效。然而,如果没有 fiddler,似乎根本没有连接,如 API 规范中详细说明的那样。 (见下文。)
判断依据网络套接字规范 https://html.spec.whatwg.org/multipage/web-sockets.html#the-websocket-interface,该异常也应该出现在 Chrome/Firefox 上...但事实并非如此。所以我怀疑它与 HTTP/HTTPS 有什么关系。无论如何,我在 httpS 页面上使用 wsS 套接字...此外:当我用在线示例中找到的另一个有效服务器替换 wss 地址时,它可以工作。
我不知道这是否相关,但 test.dev.mydomain.net 的 IP 是 10.14.x.x,其中 hello.dev.mydomain.net 是 194.247.x.x。我不知道它是否只能在 IE 上触发某种安全......
另一件事:我有 *.dev.mydomain.net 的证书,IE 似乎没有问题。该脚本最初驻留在名为 my.name.dev.mydomain.net 的服务器上,但由于我从另一个 URL 访问它(因为我们首先认为这可能是某种同源策略问题,所以我得到了重定向),我不明白这有什么关系。至少我希望不会……
任何想法都受到欢迎。
编辑:将站点添加到受信任区域也不起作用。
如果您尝试在某个网络上打开 websocket,IE 会抛出一个 SecurityError本地(内联网)领域。为了解决这个问题,您可以禁用 IE 识别本地站点的自动算法。这可以在以下位置完成Tools > Internet Options > Security > Local Intranet > Sites
.
取消选中所有复选框(或者仅取消选中一个特定复选框,如果您知道您的域最终是如何进入 Intranet 的)。
请注意,IE 使用(除其他外)其代理设置来确定本地站点:如果您的域在代理设置中被列为从代理中排除,那么它可能会被视为 Intranet 站点。这就是启用 Fiddler 后 WebSocket 可以工作的原因:它会修改 IE 代理设置,从而导致 Intranet 站点列表发生变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)