Android 模拟器浏览器无法访问主机文件上设置的本地主机子域

Android emulator browser can't access to localhost subdomains set on hosts file

在我当前的 Android 模拟器 API 26 中,我试图通过它的浏览器访问 android 模拟器主机文件中设置的本地主机子域,但没有成功。

我成功地root了我的模拟器并修改了它的/etc/hosts文件(推送本地文件并使用busybox mini vi实现)。我在浏览器中使用 adb shell 中的 ping 命令进行的一些成功测试如下(其中 192.168.0.10 是我当前分配的主机 ip):

192.168.0.10   source
192.168.0.10   source.api
192.168.0.10   source.api.local
10.0.2.2       source
10.0.2.2       source.api
10.0.2.2       source.api.local

但是对于 localhosts 子域映射,我只能成功地从 adb shell ping 域。浏览器在下一个主机映射中显示 ERR_CONNECTION_REFUSED 错误:

10.0.2.2       something.localhost
10.0.2.2       something.something.localhost

关于为什么会发生这种情况有什么想法吗?

编辑:

当前问题只发生在我的 macOS 10.14 中,我无法在 Ubuntu 18.04 中重现该问题。

当使用顶级域 .local

时,问题出在 macOS 的 Multicast DNS (mDNS) 实现上

Bonjour... "will automatically resolve the private IP addresses of link-local Macintosh computers running MacOS and mobile devices running iOS if .local is appended to their hostnames."

RFC 6762 Appendix G 推荐以下私有命名空间而不是 .local|.localhost 以避免冲突。

  • .内网.
  • .内部.
  • .私人.
  • .corp.
  • .家.
  • .lan.