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) 后再次发生这种情况。
但修复起来很简单。我不得不
- 检查@Narcarsiss 提到的 "allow Localhost Loopback" 功能(不确定该功能是否在更新中被禁用,或者我之前从未亲自检查过)。
- 在地址栏中指定协议(http://localhost:5000/ 而不仅仅是 localhost:5000/)。
完成这两项操作后,我能够在 MS Edge 中再次访问我的本地主机站点。
我有网站和桌面应用程序,我想通过 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) 后再次发生这种情况。
但修复起来很简单。我不得不
- 检查@Narcarsiss 提到的 "allow Localhost Loopback" 功能(不确定该功能是否在更新中被禁用,或者我之前从未亲自检查过)。
- 在地址栏中指定协议(http://localhost:5000/ 而不仅仅是 localhost:5000/)。
完成这两项操作后,我能够在 MS Edge 中再次访问我的本地主机站点。