我们的开发人员使用 Docker 或 VirtualBox(带有 Vagrant)在本地测试他们的代码(问题都发生在这两种情况下)。为了方便使用,我们修改了 /etc/hosts 以指向正确的 IP 地址。例如,
local.test.company.com 10.200.10.1
我们的一些开发人员使用 Linux,一些使用 macOS Sierra (10.12.3)。在 Mac 上,Chrome(和其他浏览器)对 local.test.company.com 的请求通常需要很长时间(长达一分钟或更长时间)才能解决。(Ubuntu Linux 上不会出现此问题。)在此期间,选项卡上的“加载图标”是向左旋转的灰色图标。一旦它变为向右旋转的蓝色图标,它就会非常快速地完成。加载时间缓慢对于我们经常在开发过程中刷新网站的开发人员来说是一个真正的问题。
基于这问题,Chrome 似乎花了整整一分钟来解析该网站。这对我来说毫无意义 - /etc/hosts 中的网站应该立即解析。一些开发人员可以非常一致地重现此行为。其他人则间歇性地看到它或根本看不到它,我无法弄清楚原因。
为什么对 local.test.company.com 的请求在网络浏览器中需要很长时间才能解析?
或者,我该怎么做才能“调试”这个问题并找出为什么花了这么长时间?
补充笔记
- 当 Chrome 处于“隐身模式”并开启“禁用缓存”时,这种现象仍会发生。
- ping 立即解析local.test.company.com。
答案1
我在 macOS High Sierra(10.13.3)上的 Chrome 64.0.3282.167 中遇到了同样的问题,这个 StackOverflow 答案为我解决了这个问题:
https://stackoverflow.com/a/10200111/318359
引用:
将 localhost 的所有主机文件条目放在一行中,如下所示:
127.0.0.1 localhost myproject.dev myotherproject.dev ::1 localhost
答案2
您是否尝试过在 chrome 上运行 dtruss 来查看它挂起时正在做什么?
答案3
我最终弄清楚了。事实证明,Chrome不必要在圆圈向左旋转时解析。铬合金上的圆圈在数据期间向左旋转上传并在数据期间向右下载。
我通过调试在 Chrome 中运行的 PHP 应用程序找到了答案。PHP 响应来自 Chrome 的请求,Chrome 中的圆圈继续向左旋转,直到print
PHP 中的第一个语句也就是说,直到服务器将第一个字节的数据发送回客户端。
因此,总而言之,这根本不是 DNS 解析的问题。DNS 没问题,只是我们的 Web 应用程序没有像我们想象的那样快速地发回任何数据(要么是因为在调试器中暂停,要么是因为其他原因)。