56

我目前正在使用 JavaScript 中的 WebSockets 在 IE10(在 Windows 8 上)下开发一个网站。它在 Firefox 18 和 Chrome 25 下运行良好,但在 IE10 上,当我建立连接时出现 SecurityError。

我在做什么似乎很简单:

websocket = new WebSocket('wss://hello.dev.mydomain.net');

但 IE 不喜欢它:

SCRIPT5022: SecurityError 

该脚本位于“ https://test.dev.mydomain.net ”(显然不是真实地址)。

困扰我的是,如果我只是双击本地计算机上的文件(例如 file://...),它就可以工作。更糟糕的是:如果我使用fiddler来监控 HTTP 流量......它也可以工作。而没有提琴手似乎根本没有连接,如 API 规范中所述。(见下文。)

websocket 规范来看,异常也应该出现在 Chrome/Firefox 上......但它没有。所以我怀疑它是否与 HTTP/HTTPS 相关。无论如何,我在 httpS 页面上使用 wsS 套接字......此外:当我用在线示例中找到的另一个有效服务器替换 wss 地址时,它可以工作。

我不知道这是否相关,但是来自 test.dev.mydomain.net 的 IP 是 10.14.xx 其中 hello.dev.mydomain.net 是 194.247.xx 我不知道它是否会触发某种安全性仅在 IE 上...

还有一件事:我有 *.dev.mydomain.net 的证书,IE 似乎没有问题。该脚本最初驻留在名为 my.name.dev.mydomain.net 的服务器上,但由于我是从另一个 URL 访问它(我得到了一个重定向,因为我们最初认为它可能是某种同源策略问题),我不明白这有什么关系。至少我希望它不会...

欢迎任何想法。

编辑:将站点添加到受信任区域也不起作用。

4

8 回答 8

64

如果您尝试在本地(内部网)域上打开 websocket,IE 似乎会引发 SecurityError 。为了克服这个问题,您可以禁用 IE 识别本地站点的自动算法。这可以在Tools > Internet Options > Security > Local Intranet > Sites.

内网检测设置

取消选中所有复选框(或仅选中一个特定的复选框,如果您知道您的域在 Intranet 中的最终结果如何)。

请注意,IE 使用(除其他外)其代理设置来确定本地站点:如果您的域在代理设置中被列为排除在代理之外,那么它可能会被视为 Intranet 之一。这就是启用 Fiddler 后 WebSockets 工作的原因:它会修改 IE 代理设置,因此 Intranet 站点列表会发生变化。

于 2013-11-22T12:42:17.877 回答
15

应用安全补丁,我在 Windows7/IE11 中遇到了这个问题。对于 Windows10/Edge 来说也是如此。

由于这是一个本地 websocket (ws://localhost),您必须添加ws:\\localhost\到 Internet Explorer 配置(工具 > Internet 选项 > 安全 > 本地 Intranet > 站点 > 高级)。

IE11本地内网站点配置

Windows 10/Microsoft Edge中,您将在控制面板 > Internet 选项中找到此配置。

更新

您的 webapp ( https://test.dev.mydomain.net ) 的地址也必须添加到本地 Intranet 区域请注意,应在图像中添加 webapp 地址。

于 2017-01-13T21:27:03.677 回答
8

好吧,我的问题没有那么成功,所以我会发布我找到的“解决方法”。

我在 194.247 中获得了该网站的另一个地址。. 也。这神奇地解决了它。Guess IE 不喜欢混合本地和外部的东西并监视 IP。

无论如何,我希望这对遇到同样问题的人有用。

如果您有通过配置 IE 解决“真正”问题的解决方案,请告诉我 :)

干杯,

于 2013-03-05T16:50:59.887 回答
7

浏览器有 websocket 限制。例如,Internet Explorer 将 websocket 连接的默认限制设置为每个主机头名称 6 个。为 WinForms WebBrowser 组件设置了相同的限制。

解决方案是在注册表中的键 Computer \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER下添加值。只需添加带有可执行文件名称的 DWORD 值,例如 iexplore.exe(或您的应用程序可执行文件名称,如果您使用 Web 浏览器组件)并从 2..128 范围内设置值

如何解决 SecurityException 的第二个选项是创建多个子域。

于 2018-07-17T09:31:39.197 回答
1

客户端主机名/IP 地址应与正在侦听的服务器 IP/主机名相同,否则您将收到上述错误。

1)确保服务器主机名是否配置为侦听 IP/localhost 等,如果没有明确指定主机名 ast server

2)在客户端使用相同的主机名。这将解决问题。它对我有用...

于 2016-02-24T12:52:04.070 回答
0

我遇到了错误(虽然它没有说 SCRIPT5022 部分,而只是报告“ScriptError”)。我通过单击“受信任的站点”然后添加托管远程 websocket 的机器解决了这个问题。请注意,要添加到受信任的站点,

  • 我必须提供不带“ws://”部分的地址(例如 mymahcine.mydomain.com)

  • 我不得不取消选中“需要服务器验证 https:// ”选项的框。

  • 完成添加域后,我重新选中了“需要服务器验证 (https://)”框。我建议每个人都这样做。取消选中该框只是添加不以开头的站点的一种解决方法https(在我的情况下是 ws://)
于 2015-05-12T17:36:44.530 回答
0

我在一个客户的环境中遇到了同样的问题。原来他们有一个代理配置,不允许直接连接到 WebSocket 端点,也不支持 WebSocket 协议。临时解决方案是禁用代理,一切都开始工作了。长期的解决方案是编辑代理的配置(.pac 文件)以排除 WebSocket 端点的地址。

要禁用代理,请转至:Internet Explorer 选项 > 连接选项卡 > LAN 设置按钮 > 取消选中自动检测设置。

希望这可以帮助某人。

于 2018-03-22T19:50:36.920 回答
0

除了确保 Internet 区域不是 localhost(如上面的答案)外,还要确保如果使用 https,则应使用 wss。

这在其他浏览器中不是问题,但 IE 有点挑剔。

在此处输入图像描述

于 2019-03-16T13:17:43.610 回答