这里有一个类似的问题, 为什么 Chrome 的 DNS 缓存中存在 TTL -1000? 但也没有答案。
当我访问 chrome://net-internals/#dns 时,我看到很多带有-1000
值的 DNS 缓存。当我点击Clear host cache
并访问新网站时,我得到了具有相同负值的新缓存,并且它在一分钟左右内就会过期。
有人可以解释一下吗?
答案1
从我自己的观察来看,TTL 列毫无意义,并且始终包含值-1000
。我只能推测这是因为 Chrome 的 DNS 缓存不遵循标准,而是自行其是。更多信息请参见下文。
Unix Stack Exchange 帖子 Chromium/Chrome 不会缓存超过一分钟的 DNS 请求 引用答案 bugs-chromium - 问题 164026 - 自 2011 年 4 月 21 日起不再遵守 DNS TTL,已于 2013 年 10 月 10 日关闭,名称为“WontFix(已过时/按预期工作)”
它引用了错误报告中的这句话:
HostCache 目前假设所有肯定结果的 TTL=60s。对于异步 DNS 解析器,我们计划使用 TTL=max(60s, server_reported_ttl),即至少 60s。这样做的理由是为了提高缓存性能。(当 CDN NS 提供 TTL=10-20s,并且需要 30s+ 才能获取所有子资源时,我们经常必须在一次页面加载期间重新查询相同的主机名。)
此外,尽管 Chrome 会在一分钟后将缓存中的条目标记为[Expired]
,但这些条目只是停留在那里。我没有尝试测量它们会停留多长时间,但它们在过期后至少还会停留 15 分钟。
我的结论是,Chrome 在追求速度方面偷工减料,甚至违反了 DNS 规则。具体来说,它忽略了 TTL 值,仅在一分钟后将所有条目标记为已过期,但随后继续将这些条目保留一段(对我来说)未知的时间。
TTL 列中的值和[Expired]
标记没有实际意义。Chrome 将继续将速度置于许多其他考虑因素之上。