RFC2606针对“localhost”顶级域名声明如下:
“.localhost” TLD 传统上在主机 DNS 实现中被静态定义为具有指向环回 IP 地址的 A 记录,并保留用于此类用途。任何其他用途都会与广泛部署的假定此用途的代码相冲突。
因此,如果我没有看错的话,IETF 表示“.localhost”是本地网站开发的理想顶级域名。因此,我的公司要求我们所有的本地开发项目都使用顶级域名“.localhost”。(我们使用 Vagrant + Puppet 来确保整个团队的所有开发环境都相同)。例如,hosts 文件将包含如下条目:
192.168.10.10 someproject.localhost
10.9.8.7 anotherproject.localhost
问题在于,此 tld 在所有浏览器(Chrome 除外)中均可正常工作。每当使用 localhost tld 时,Chrome 都会发出 ERR_CONNECTION_REFUSED 消息。如果我像这样更改 tld:
192.168.10.10 someproject.loc
10.9.8.7 anotherproject.loc
Chrome 运行良好。事实上,我测试了许多不同的任意顶级域名,它们在 Chrome 中也都运行良好。“localhost”是唯一在 Chrome 上给出 ERR_CONNECTION_REFUSED 消息的顶级域名。
我使用的是 Windows 7,Chrome 版本 53.0.2785.116 m(64 位)。但我在 Windows 10 上遇到了同样的错误。我团队中的每个人也都遇到了同样的错误,无论他们是在家用电脑还是工作电脑上(Windows 和 Mac)。
为什么当 tld 为“.localhost”时 Chrome 无法连接?
答案1
你做的事情是错的。
localhost 是一个主机名指向 127.0.0.1 而不是域,因此将主机添加到它好像它是一个域但指向其他地方在逻辑上是不正确的。
您可能对 .local 域名感到困惑,但是有理由不使用它,这些理由已在其他问题中得到回答。本质上,您不应该编造一个假域名,而应该获取一个正确的域名,然后在您的主机文件/本地 DNS 中的子域名下添加主机。