微软Edge浏览器不允许使用本地回环地址进行websocket通信。

7
我有一个网站和桌面应用程序,我想通过WebSocket将它们连接起来。因此,我的网站尝试连接wss://localhost:8080(例如)。
在IE11中可以正常工作,但在“MS Edge”中出现错误:
跨区请求不被允许。
我遇到了这个问题,在Win10 10240上,所以标志“允许本地主机环回”默认已启用,但没有帮助。
当我使用CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"或这个实用程序时,一切都按预期工作。
所以,这是一个情况,在新版本的“MS Edge”中,HTTP的环回是被允许的,但WebSocket则不被允许吗? 如果是这样,是否有可能制定一些解决方案,而不必强制用户运行某些shell命令或下载外部实用程序?
相关问题:无法在Windows 10预览版的Microsoft Edge(Project Spartan)中打开本地主机

微软Edge浏览器的另一个伟大功能是提高浏览器兼容性... - Pedro Lobito
3个回答

6
在Microsoft Edge浏览器中,在标题栏(搜索栏)中键入"About:flags"。不要加引号,勾选/取消勾选"允许Localhost Loopback"功能。
适用于Win Build 10240的Edge浏览器。(仍然适用于基于Chrome的新版Edge浏览器)

2
还可以在注册表中找到:HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\ExperimentalFeatures\AllowLocalhostLoopback是的,注册表键中丑陋的 8wekyb3d8bbw 部分是完全有效的,这是微软的唯一开发者ID,在注册表中出现了数百次。 - tresf
1
当 Edge 首次发布时,这个功能是有效的。现在你需要使用 CheckNetIsolation 命令。 - tresf
这些选项似乎在Edge浏览器中不再存在了。有人知道允许访问本地主机的最新选项是什么吗? - mike01010

5

经过一些调查,我找到了错误的来源。这是我的代码库,可以重现错误:https://github.com/AZaviruha/ms-edge-ws-strange

简而言之,在MS Edge中调用new WebSocket时,如果使用错误的“本地”主机参数,它不会生成异常:

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 );
    }
}

因此,您无法“重试”连接不同的主机。
顺便说一下,如果尝试连接不存在的非本地主机,将会生成异常!

你使用的是哪个版本的Edge?10240吗?你可以查看Edge用户代理字符串(“Edge/12.XXXXX”,其中XXXXX是构建号)来确认。 - Jacob Rossi - MSFT
我已在10166和10240上重现了这种行为。 - azaviruha

1
这最近又发生在我身上,是在进行了Windows 10 Creator's Update (1703)之后。
但是修复很容易。我需要:
1. 检查@Narcarsiss提到的“允许本地主机环回”功能(不确定是否在更新中被禁用,或者以前从未自己检查过)。 2. 在地址栏中指定协议(http://localhost:5000/ 而不仅仅是 localhost:5000/)。
两者都做完后,我就能够在 MS Edge 中再次访问我的本地主机站点了。

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