为什么Microsoft Edge可以打开一些本地网站,但不能打开其他本地网站,其中域名在hosts文件中被路由到127.0.0.1?

75

像许多程序员一样,我在本地测试网站。
我使用hosts文件将域名映射到我的本地IP地址(127.0.0.1)。

我使用有资格的域名,通常带有一个"d"子域名(表示"开发")。

例如:

d.somewebsite.com 
d.anotherwebsite.com 
and so on...
在Microsoft Edge中,大多数网站都能正常访问。但是有几个网站无法访问,这些域名并没有什么特别或奇怪之处,只是一个简单的"d.someletters.com"。
在Chrome、IE和Firefox中可以正常工作。
在Edge中,我收到错误消息:"嗯,我们无法访问此页面。"
起初我以为它没有解析IP地址。然而,当我在另一个与URL无关的网址上犯了一个拼写错误时,我意识到未经hosts文件路由的请求将被发送到我的ISP进行解析。如果我的ISP无法解析它,他们将返回这个特殊的搜索结果页面,并提供可能要查找的内容建议。好吧,当我去本地域时,我没有从我的ISP那里得到这个页面。我直接从Edge中得到了上面提到的错误。
因此,对我来说,Edge正在正确解析该域,否则它就会被发送到我的ISP的DNS。
那么,我认为Edge可能无法连接到本地机器。但是,像我说的,几个本地域名都正常工作。而且,在Edge中直接使用127.0.0.1也可以工作。只有这几个域名给我带来了问题。而且只有在Edge(所有其他浏览器都正常运作)。有什么想法吗?
Web服务器是Windows下的Apache2(xampp)。
此外,如果我在Edge中打开调试窗口并监视网络,则看不到任何请求。

很确定这与兼容性视图设置类似于IE有关。我可以在IE上来回切换它。不确定Edge上的选项在哪里。 - Dipen Shah
谢谢你的帮助,但我不认为这就是答案。我的兼容性列表中没有任何IE或“企业模式”(Edge的兼容性系统)的站点。 - Evan de la Cruz
真的不确定,抱歉。 - Dipen Shah
2
我自己遇到了这个问题。这里描述的所有修复方法都没有起作用,但是我打开了Fiddler(HTTP调试器),然后它就正常工作了。因此,一个解决方法是安装Fiddler并在Edge中进行测试时始终保持其打开状态。但我不确定Fiddler是如何使Edge工作的——如果Edge通常不发送请求,那么为什么添加代理会使其发送请求呢? - Dave Kennard
显示剩余5条评论
10个回答

122

15
那个疯狂的标识符在哪里可以找到或记录? - mlhDev
1
这对我没有用,但运行 Fiddler 却可以,这很奇怪。 - Daniel Jackson
2
对我来说可以运行。我在https://developer.microsoft.com/en-us/microsoft-edge/platform/faq/#how-can-i-debug-localhost中找到了相关文档。 - manavi
8
我非常喜欢微软、Windows和IE/Edge。其他浏览器都可以正常工作,但是Edge需要运行一些奇怪的命令行脚本。不能说这让我感到意外。感谢分享答案和资源。 - jeffjenx
1
@Chris Halcrow 好的,我明白了。我在下面的另一篇帖子中提到了这个修复方法。基本上我说的是这个修复方法似乎有一段时间有效,但后来行为又恢复原状了。 - Evan de la Cruz
显示剩余8条评论

12

Edge浏览器不支持VPN IP地址,因此需要使用某种代理来解决问题。以下是我发现行得通的一些解决方案:

  1. 安装并运行fiddler。Fiddler基本上会拦截浏览器发出的请求,然后将其转发到目标。这是最简单的解决方法。

  2. 通过内置的Windows工具netsh配置代理。基本步骤涉及将您的开发域分配给127.0.0.0/8范围内的可用本地私有IP地址,然后将此IP映射到VPN上的Web服务器IP。请参阅这里的逐步说明。

  3. 使用ssh的端口转发功能配置代理。假设本地主机上的端口80可用,将127.0.0.1 d.somewebsite.com添加到您的主机文件中,然后运行以下ssh命令:ssh -L localhost:80:localhost:80 user@devwebserver,其中devwebserver是您的开发Web服务器的主机名(例如在VM或vagrant实例中,或跨VPN)。此选项假定您对开发服务器具有ssh访问权限。


1
我没有使用VPN。什么是“VPN IP地址”? - Evan de la Cruz
2
Fiddler一直是个好朋友,但我没想到他会在这种情况下帮我解决问题...我已经为此苦苦挣扎了几个小时,现在终于成功了...谢谢! - makak
没有任何给出的解决方案对我起作用,但是 Fiddler 做到了!只需安装它并修复 Microsoft 的问题即可! - undefinedman
我一直在苦苦寻找答案,为什么Edge不能与活动目录域上的Web服务器配合工作,唯一有效的解决方案是运行Fiddler。我仍然不明白发生了什么事? - Ryan Mortier

12

我(认为我)解决了它!

不起作用的方法:

  • 更改IE兼容性设置或Windows兼容性列表
  • 使用完全限定域名
  • 使用除回环之外的IP地址
  • 使用http vs https
  • 从网页中删除所有JavaScript和跨站点脚本/资源
  • 检查/about:flags选项中允许localhost回传或使用兼容性设置的选项
  • 从Windows注册表的TabProcConfig中删除/添加/编辑条目
  • 删除浏览历史记录、缓存、Cookie

解决方案:在完全相反的情况下:

从您的受信任的网站列表中删除域名!

  1. 打开Internet选项对话框(只需询问Cortana或使用Windows键+s)
  2. 转到安全选项卡
  3. 单击受信任的网站区域
  4. 单击站点按钮
  5. 从受信任的站点列表中删除有问题的域名
  6. 单击应用,然后关闭对话框
  7. 打开Edge(如果已经运行,请重新启动)

我应该注意到,使用常识,我认为造成问题的不仅是该网站仅存在于“受信任的站点”区域中的事实。 我认为这是该区域上的某个设置。 因此,在我从“站点”列表中删除域名之前,我使所有设置与我的Internet区域设置完全匹配(中等高安全性,启用受保护模式,在所有站点上不要求服务器验证),并尝试了我能找到的每种组合。 没有任何区域安全设置的组合都能起作用。 唯一的解决方案就是完全从“受信任的站点”列表中删除域名。 有趣的是,即使这是IE的Internet设置对话框,但它在IE中也可以正常工作。 这似乎只影响Edge浏览器。

Windows 10 Internet Options

Remove Trusted Sites from the Trusted Zone

编辑: 两周后,我将配置更改为不使用hosts文件,而是在本地Linux机器上使用dnsmasq并将其用于DNS。 我不确定它是否立即发生,但在某个时候Edge再次停止工作! 我已经在about:flags中选中了“允许环回”复选框,因此我不期望CheckNetIsolation修复起作用。 但是,它确实起作用了。 Edge版本为20.10240.16384.0。 我使用了来自无法在Windows 10预览版中的Microsoft Edge(Project Spartan)中打开本地主机的修复方法。

编辑#2 几个月后,Edge再次出现此问题。 我尝试了之前的两种解决方案(和其他解决方案),但两者都不再适用于我。 我保留这个答案,因为我认为我遇到了两个不同的问题。


我很好奇,如果你启用了(增强)保护模式(见最后一张截图),IE是否会像Edge一样表现?我们在两个浏览器中都遇到了这个相同的问题(和解决方案),在IE中它是由EPM触发的。 - nemec
我尝试了Edge,无论是否启用保护模式都没有任何区别。我很快会尝试IE并回报结果。 - Evan de la Cruz
有趣。在我的情况下(在第一个答案中描述),通过Internet选项将内部网域添加到受信任站点列表中并没有帮助。我认为这些设置不适用于Edge浏览器。但从你的回答中可以明显看出,有时它们确实适用。 - beluga
@nemec,无论我使用哪些设置,该网站都在IE中加载。但是我应该注意,在运行CheckNetIsolation后,如https://dev59.com/v10a5IYBdhLWcg3wboMv?rq=1所述更改了我的配置后,Edge再次出现故障。 - Evan de la Cruz
1
就像您所链接的那样,在提升的命令提示符中运行解决方案 CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe" 可以修复它。 - Kevin Ghadyani
显示剩余4条评论

7

因为我的本地站点不在受信任的站点列表中,所以你提供的“从受信任的站点中删除”解决方案对我没有用。

但是你让我查看了Internet选项,我成功地在Windows 10上为本地站点启用了IIS。 这是我做的:

  1. 打开Internet选项并选择“本地网络”

enter image description here

  1. 单击“站点”

enter image description here

  1. 单击“自动检测局域网”

enter image description here

  1. 单击确定。 在Microsoft Edge中尝试您的本地计算机站点,现在应该可以正常工作。

2
我的Edge又出现了这个问题,我很希望这个解决方案能够解决,但不幸的是对我没有用。 - Evan de la Cruz
3
我也试过了,但没有起作用(我正在私有网络上运行vagrant)。 - dtbarne
1
在Windows 10上,“站点”选项对我来说是禁用的,所以我无法修复它。 - LeonanCarvalho

4
可能与您的情况无关,但仍然需要注意。我的设置如下:一个公共空间地址(互联网)页面试图在iframe中加载一个私人空间地址(内部网络),而Edge将拒绝加载具有相同“嗯,我们无法访问此页面”消息的内部网络页面,并且会在调试控制台中出现“SEC7117错误”。结果发现,Edge不喜欢混合互联网/内部网络区域(请参见 Understanding Enhanced Protected Mode 博客文章以了解原因)。Edge在单独的AppContainers中运行选项卡,而AppContainer网络限制对您的网络配置非常敏感。
我的解决方案是通过为其分配第二个私有空间IP,将托管内部网络页面的服务器从域网络中移除,并创建到该IP的第二个DNS条目。服务器最终具有2个IP:一个在域网络上,一个备用IP和2个不同的DNS条目。然后将Edge指向备用URL,它开始正常加载内部网络页面。似乎只要PC的IP掩码和页面URL不匹配,Edge就会加载该页面。
我提到的博客文章中有关于localhost的环回阻止和IE缺乏privateNetworkClientServer功能的信息。据我所知,所有这些信息都适用于Edge。

2
绝对不适用于我的情况。我的内部网页是从本地计算机提供服务的(换句话说,客户端和服务器是同一台机器)。没有 iframe。没有混合区域。我有一个带有以下公共 HTML 文档的本地页面:<html><body>hello</body></html>。我的机器名称不包括域名(它没有经过验证)。此外,我可以使用主机文件访问几个本地站点。只是这一个不行。所以,d.test1.com 和 d.test2.com 都可以工作,但是这个 t.test3.com 却不能工作。在其他浏览器中它可以正常工作。 - Evan de la Cruz
博客文章的链接已经失效。它似乎指向了这篇文章 - Addison Schuhardt

3
根据您的编辑,我注意到您现在使用的是192.168.0.0/16地址访问网站,而不是127.0.0.1。我猜测您遇到了一个问题,因为Edge浏览器会根据用于访问网站的接口而表现不同,而其他浏览器则没有这种情况。
在我的环境中,我设置了Virtualbox host-only网络,并将其NdisDeviceType设置为1。只有当我将NdisDeviceType更改为0后,Edge才允许我通过此接口导航到网站。您需要的注册表键是:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\XXXX

你需要正确的接口密钥,而不是XXXX,我从“route print”中确定了该密钥并将其减去1。对于我来说,它是“0016”。

要更改的值称为 *NdisDeviceType。(这是一个字面上的星号。)我将它从0更改为1,并且必须重新启动Windows才能注意到更改。

我的答案来自于2017年10月3日Jan i L发布的帖子。我还在另一个stackoverflow问题中详细介绍了这个解决方案。另请参见Virtualbox票15565


我不再遇到这个问题,所以无法确认修复。但是听起来很有希望。 - Evan de la Cruz
在检查我的编辑时,看起来我遇到了回环和本地IP地址的问题。这个答案仍然适用吗? - Evan de la Cruz

3
当这种情况发生时,我可以在下面的注册表键中找到与域名匹配的域条目。当我删除它时,事情就会有所改善,但过一段时间后,Edge会再次添加它回去。
计算机\HKEY_USERS\S-1-5-21-964789662-521690395-1734141374-1111\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\TabProcConfig

这也是我的问题。有人知道为什么吗? - Relefant
不知道为什么,但我使用PowerShell删除并重新安装Edge后,问题就不再出现了。快速搜索如何执行此操作,找到了这个网站:https://www.cnet.com/how-to/how-to-reinstall-default-apps-in-windows-10/。你可以尝试一下... - Brian
1
无法在该路径下找到“TabProcConfig”(对于当前用户,指定的用户不存在)。 - Qtax
从TabProcConfig中删除我的网站对我有用。但是我也必须将其从受信任的站点中删除(之前我添加了它,因为另一个提示这样说)。 - user2543253

2

其他的解决方案对我都无效。原来我的问题与VPN有关。微软Edge浏览器仍不支持VPN IP地址,而Internet Explorer 11则支持。令人惊讶的是,这个问题在2016年5月仍然存在。

附加细节: https://social.technet.microsoft.com/Forums/en-US/b3a687ae-345d-4c3f-9070-184b33fb1fc6/microsoft-edge-cant-access-vpn-ip-address-but-ie-11-can?forum=win10itprogeneral

目前,Microsoft Edge似乎无法与VPN很好地配合使用。而从Microsoft Edge连接到互联网的机制与Internet Explorer 11和其他桌面浏览器略有不同,但我无法清楚地解释,因为我对此了解不多。

因此,请使用Internet Explorer 11。


2

在我的情况下,将网络类型从私有更改为公共即可解决问题。这也是可重现的,更改网络类型可靠地将状态从“工作中”更改为获取:Http failure response for (unknown url): 0 Unknown Error


你能提供在Windows 10家庭版(有线以太网)上更改网络类型的步骤吗?我似乎找不到我期望的单选按钮。我能找到的最接近的是具有不同私人公共选择的网络共享选项,但这些选项似乎不太对。 - Evan de la Cruz
  1. 在系统托盘中点击WiFi图标;
  2. 点击您的网络属性;
  3. 将网络配置文件从私人更改为公共。https://tinkertry.com/how-to-change-windows-10-network-type-from-public-to-private
- Mark Leong

0
对我来说,我打开了Internet选项(控制面板),然后选择了安全性,接着选中了本地 Intranet,并勾选了“自动检测 Intranet 网络”。这样一来,下面的嵌套选项就变灰了,Edge 立即开始使用我的 hosts 文件。

2
我尝试了这个,但不幸的是没有成功。 - Daniel Jackson
@DanielJackson,由于安全限制,我无法在我的工作机器上完成这个任务... - Radmation

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