IE10上的WebSocket给出了一个SecurityError

Eld*_*edB 47 javascript websocket internet-explorer-10

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

我正在做的事情似乎非常简单:

websocket = new WebSocket('wss://hello.dev.mydomain.net');
Run Code Online (Sandbox Code Playgroud)

但IE不喜欢它:

SCRIPT5022: SecurityError 
Run Code Online (Sandbox Code Playgroud)

该脚本位于" https://test.dev.mydomain.net "(显然不是真正的地址).

困扰我的是,如果我只是双击我本地计算机上的文件(例如file:// ...)它就可以了.更糟糕的是:如果我使用fiddler监控HTTP流量......它也有效.然而,如果没有fiddler似乎没有任何联系,详见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访问它(因为我们首先认为它可能是某种同源策略问题,所以我得到了重定向),不明白它是如何重要的.至少我希望它不......

欢迎任何想法.

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

Geo*_*kin 52

如果您尝试在本地(Intranet)域上打开websocket,IE看起来会抛出SecurityError .要解决此问题,您可以禁用IE的自动算法来识别本地站点.这可以在Tools > Internet Options > Security > Local Intranet > Sites.

内部网检测设置

取消选中所有复选框(或者只有特定的复选框,如果您知道您的域在Intranet中的确切结果).

请注意,IE使用(其中包括)其代理设置来确定本地站点:如果您的域名在代理设置中被列为从代理中排除,那么它可能会被视为内部网站.这就是为什么WebSockets在启用Fiddler时可以工作的原因:它修改了IE代理设置,因此内部网站点列表也发生了变化.

  • 请注意,这也会影响IE11. (11认同)

lmi*_*lmh 9

应用安全补丁后,我在Windows7/IE11中遇到此问题.对于Windows10/Edge来说是同一个故事.

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

IE11本地Intranet站点配置

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

UPDATE

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


Eld*_*edB 7

好吧,我的问题不是那么成功,所以我会发布我找到的"解决方法".

我在194.247获得了该网站的另一个地址..太.神奇地解决了这个问题.猜猜IE不喜欢混合本地和外部的东西并观看IP.

无论如何,我希望这对任何有同样问题的人都会派上用场.

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

干杯,


Rud*_*cek 5

浏览器具有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的第二种方法是创建多个子域。