你有没有花过一小时想不通:为什么明明网络连接很正常,却就是打不开某个网站?是的,我以前也这么想,直到我发现真正的元凶通常是 DNS,而不是我的连接。



于是我开始研究 Chrome Net Internals,发现了一件很有意思的事情——实际上有两个 DNS 相关的部分,名字听起来几乎一样,但做的事却完全不同。我说的是 DNS Cache 和 DNS Events。大多数人没有意识到自己在使用两个彼此独立的工具,这也正是为什么会让人变得很困惑。

让我把我查到的内容说清楚。DNS Cache 基本上就是 Chrome 用来存储网站信息的“记忆库”。当你的浏览器弄清楚某个网站的 IP 地址时,它会把这条信息保存起来,这样下次就不必再去向 DNS 服务器查询了。效率是不是很高?因为 Chrome 已经知道该去哪儿了,所以页面能更快加载。但问题在于——一旦网站更换了服务器,或者你的网络配置发生了变化,Chrome 仍会继续使用那份旧的缓存数据,仿佛它仍然是准确的。于是你就可能会遇到空白页面。

DNS Events 则完全不同。它们并不在存储任何东西——更像是一份实时的活动日志。你在排查问题时,DNS Events 会让你清楚看到 Chrome 在实时解析地址的过程中到底在做什么。你可以看到解析失败、超时、网络错误,以及整个过程的展开情况。

我发现它们的区别其实很简单:DNS Cache 回答的是“Chrome 目前已经有什么信息?”而 DNS Events 回答的是“Chrome 现在到底在做什么?”一个用来存数据,一个用来记录活动。

当我遇到某个网站打不开的情况时,我打开 chrome://net-internals/#dns,查看缓存了什么。结果发现:网站已经换了服务器,但我的浏览器还在使用旧地址。就在那时我才知道,你只需要点击“Clear host cache”,就能直接清空所有已存储的 DNS 数据,而且不会碰到你的历史记录或密码。

不过,真正让我排查得更顺的,是把这两个工具结合起来使用。清空缓存之后,我会观察 DNS Events,看看新的解析活动。只要在清空之后 DNS Events 显示解析是成功的,我就知道问题已经解决了;如果错误仍不断出现,那我就能进一步判断可能更深层的原因,比如网络问题或服务器问题。

关于 DNS Events 的一点是——它们实际上不会“搞坏”任何东西,因为它们只是日志。真正会影响页面是否能加载的是 DNS Cache。所以如果你正在排查问题,先清除缓存,再监控 DNS Events 看接下来会发生什么。

我发现,只要遇到网站打不开的情况,chrome://net-internals/#dns 就会成为我的第一步操作。只要 30 秒,老实说,基本能解决掉我大多数的问题。Chrome 让你可以访问到这些别的浏览器隐藏起来的内容——如果你知道自己在看什么,这就非常有用。

奇怪的是,居然有这么多人不知道这两个其实不一样。有人以为 DNS Cache 和 DNS Events 是同一回事,但其实并不是。一个是你已存储的数据,一个是你的活动报告。理解这两者的差异,会让排查问题变得轻松得多,也没那么令人烦躁。
查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
请输入评论内容
请输入评论内容
暂无评论