Microsoft Edge 不允许 websockets 的本地主机环回

Microsoft Edge does not allow localhost loopback for websockets

我有网站和桌面应用程序,我想通过 websockets 连接它们。例如,我的网站尝试连接到 wss://localhost:8080。

它在 IE11 中有效,但在 "MS Edge" 中出现错误:

Cross zone request is not allowed

我在 Win10 10240 上遇到这个问题,所以默认启用标志 "Allow localhost loopback",但没有帮助。

当我使用 CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe" 或这个 utility 时,一切都按预期工作。

那么,在 "MS Edge" 的新版本中,http 允许环回,但 websocket 不允许环回吗? 如果是这样,是否可以采取一些解决方法,而不是强迫我的用户使用 运行 某些 shell 命令或下载外部实用程序?

相关问题:

经过一番研究,我找到了错误的根源。这是我的回购协议,重现错误:https://github.com/AZaviruha/ms-edge-ws-strange

简而言之,当您在 MS Edge 中调用 new WebSocket 时,它不会产生异常,当您使用错误的 "local"-host 参数调用它时:

var socket, path;
var hosts = ['localhost', '127.0.0.1'];

for (var i in hosts) {
    path = 'ws://'+hosts[i]+':9446';
    console.log( '===> Tested path :: ', path );
    try {
        socket = new WebSocket( path );
        break;
    }
    catch ( e ) {
        // !!! Never shown !!!
        console.error( '===> WebSocket creation error :: ', e );
    }
}

因此,您无法"retry"连接不同的主机。

顺便说一句,如果你尝试非本地不存在的主机,它会产生异常!

在 Microsoft Edge 浏览器的标题栏(搜索栏)中键入 "About:flags"。没有引号,Tick/Un-tick "allow Localhost Loopback" 功能。

Win Build 10240 上的 Edge。(仍然适用于 New Edge(基于chrome))

我最近在完成 Windows 10 Creator's Update (1703) 后再次发生这种情况。

但修复起来很简单。我不得不

  1. 检查@Narcarsiss 提到的 "allow Localhost Loopback" 功能(不确定该功能是否在更新中被禁用,或者我之前从未亲自检查过)。
  2. 在地址栏中指定协议(http://localhost:5000/ 而不仅仅是 localhost:5000/)。

完成这两项操作后,我能够在 MS Edge 中再次访问我的本地主机站点。