WebDNS缓存机制关于DNS文件修改的原理是什么?

日期: 栏目:文章分享 浏览:707 评论:0

经常做web开发的工程师会遇到需要将域名绑定到特定IP进行测试的情况。大家一般都是通过修改hosts文件来解决问题的,但是经常遇到修改hosts不生效,有时生效,有时不生效的情况。为什么?

来自:DNS缓存机制

有一篇非常详细的文章 What when you to a URL on DNS 缓存机制。

简单来说,域名的DNS记录在本地会有两种缓存:浏览器​​缓存和操作系统(OS)缓存。在浏览器中访问时,会先访问浏览器缓存,没有命中则访问OS缓存,最后访问DNS服务器(一般由ISP提供),然后递归DNS服务器查找域名记录并返回。

DNS 记录会有一个以秒为单位的 ttl 值(生存时间),表示记录的最大有效期。经过实验,OS缓存会引用ttl值浏览器怎么修改dns,但并不完全等于ttl值,而且浏览器DNS缓存时间与ttl值无关,每个浏览器使用一个固定值。这是一篇详细测试为什么 Web DNS 可能是坏事的文章:

后来我也测试了一下。Mac下DNS缓存时间(23.0.1271.101)为1分钟,DNS缓存时间为10秒左右。

解决方案:hosts文件修改原理

那么修改hosts文件后,发生了什么?这里先提一个工具:://net-/#dns。这是当前系统中的 DNS 缓存列表及其使用情况。通过这个工具可以看到修改hosts文件后浏览器怎么修改dns,所有OS中的DNS缓存都会被清空,但浏览器缓存不会改变。网上盛传,://net-/#dns下的“清除主机缓存”可以清除DNS缓存。在这里,博主做了一个测试。这里只清除了操作系统的缓存,没有清除浏览器的DNS缓存。当 DNS 记录显示“”时,表示浏览器 DNS 缓存已被清除。所以使用Clear Host Cache其实是没用的。

那么回到最初的问题,为什么有时候修改hosts文件后会立即生效,但是有时候却不是一直生效呢?其实原因很简单。这是因为浏览器缓存的过期时间是根据最后一次查询某个域名的DNS记录来计算的。

例如:我用了00秒的访问。这时候就生成了浏览器DNS缓存,然后我修改hosts文件指向本地的127.0.0.1,然后在05秒内尝试再次访问这个地址,因为浏览器的DNS缓存还没有过期,所以无法反映hosts的修改。

还有一种情况,我很久没访问了,然后修改hosts文件指向127.0.0.1,这次是因为浏览器没有DNS缓存,因此会查询操作系统中的DNS缓存,此时hosts文件生效!

前面说过,浏览器DNS缓存时间大概是10秒左右,所以在调试程序的时候,很多人都习惯于修改hosts进行调试,因为大多数情况下,修改hosts之后,浏览器DNS缓存已经失效了。

那么如何主动清除浏览器DNS缓存呢?博主还没有找到办法。在测试了“清除缓存”选项后,他发现它并没有达到预期的效果。

然后,请在修改主机后耐心等待几秒钟。

最后一个广告,博主正在开发一个比修改hosts更方便的DNS更改工具,应该会在新的一年推出,敬请期待!

标签:

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。发布前请先查看评论规则:点我查看