Microsoft Edge 上 WebSocket 到本地主机无法工作

12

我已经创建了一个简单的WebSocket服务器,并尝试使用以下代码连接它:

function test(name) {
    var ws = new WebSocket('ws://localhost:1234');
    ws.onopen = function () {
        ws.send('Hello from ' + name);
    }
}
test('Edge');

在Windows10上,从Chrome和IE11运行良好,但是当我尝试从Edge运行时,onopen函数没有被调用,最终我得到以下错误:

SCRIPT12029: WebSocket错误:网络错误12029,无法与服务器建立连接

这发生在Edge的版本12.10240

关于类似问题的讨论可以参考这里,但错误消息不同。

我尝试过的事情:

  • IP - localhost127.0.0.1、实际IP
  • 允许本地回环标志 - 打开和关闭都试过了

当尝试与不同的机器通信时,问题不会发生。

这是Edge的缺陷还是我的操作有误?


报告错误给微软可能吗? - Jan
@Jan 我已经发送了反馈,但同时我想确保我没有错过任何明显的东西(我对WebSockets的经验不多)。 - Motti
1
也许吧,但这对我来说肯定像是一个错误。 - Jan
这不是一个错误。这一切都与“loopback”有关。当您连接到不同的IP地址(不是“localhost”,“::1”或“127.0.0.1”)时,该IP地址通常不被视为“loopback”尝试,因此需要“CheckNetIsolation”,它是特定于“ModernUI”应用程序(Edge是ModernUI应用程序)的。这只是IE11和Edge在涉及环回连接时的许多陷阱之一。在域网络上,在调用“CheckNetIsolation”后仍然可以阻止连接,因为在域上更改了“本地Intranet区域”的定义。 - tresf
1个回答

14

我遇到了类似的问题,但是它发生在实际在浏览器中导航到页面时。我可以使用短语“localhost”,它可以正常工作,但是当我使用我的计算机名称时不起作用。我在 这个论坛 上找到一个建议,在管理员提示下运行以下命令:

CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

对我有用。我认为你可能会遇到同样的问题。

正如论坛所建议的那样,您现在还可以通过打开Edge并导航到“about:flags”,然后在“开发人员设置”下选中“允许本地主机环回(这可能会使您的设备处于风险之中)”。这应该比将随意的东西粘贴到命令提示符中要安全一些。

编辑:如下面的tresf指出,关于:flags中的环回复选框似乎已经停止工作(作为修复),因此您需要使用CheckNetIsolation命令来使Edge免除此类问题。


4
最近版本的Edge浏览器貌似默认启用了回环标志(loopback flag),但是仍然需要进行“CheckNetIsolation”修复,以确保正常使用。 - tresf
@QZSupport 我之前也遇到了类似的问题,使用“CheckNetIsolation”命令解决了。它是用来做什么的? - Sanich
2
@Sanich,微软的解释是:“Edge作为Windows现代应用程序运行,与IE不同,因此出于安全原因,默认情况下具有网络隔离。” 还要注意,在本地Intranet区域中,“自动检测设置”可能会在域上对IE产生类似的影响。https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/ - tresf
@QZSupport 谢谢!仅启用回送标志的原因不能解决问题,而“CheckNetIsolation”可以吗? - Sanich
1
@Sanich,你的问题最好向Edge开发人员提出,但是微软博客文章解释了将强制实施所有ModernUI应用程序(而不仅仅是Edge)的回环限制,从而使Edge复选框变得多余。此外,域环境将“本地Intranet区域”与工作站计算机不同对待,因此在Edge和IE上解决/故障排除WebSocket到localhost的问题是一个模糊且相当未记录的过程。 - tresf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接