<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="浏览器DNS缓存机制分析-为什么修改hosts不立即生效" id="card1">
<p> 游客</p><p>
标题:浏览器DNS缓存机制分析-为什么修改hosts不立即生效<br/>
正文:<br/>
经常做Web开发的工程师，都会遇到需要将某个域名绑定到特定IP上，进行测试的情况。大家一般都会用修改hosts文件的方式来解决，但是经常也会遇到修改hosts不生效的情况，而且有时生效，有时不生效的情况也有发生，这到底是为什么呢？起：DNS缓存机制关于DNS缓存的机制，有一篇非常详细的文章What really happens when you navigate to a URL。简单来说，一条域名的DNS记录会在本地有两种缓存：浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候，会优先访问浏览器缓存，如果未命中则访问OS缓存，最后再访问DNS服务器(一般是ISP提供)，然后DNS服务器会递归式的查找域名记录，然后返回。DNS记录会有一个ttl值(time to live)，单位是秒，意思是这个记录最大有效期是多少。经过实验，OS缓存会参考ttl值，但是不完全等于ttl值，而浏览器DNS缓存的时间跟ttl值无关，每种浏览器都使用一个固定值。 这里有一篇文章，做过详细的测试Why Web Browser DNS Caching Can Be A Bad Thing：后来我也做过测试，Mac下Chrome(23.0.1271.101)的DNS缓存时间是1分钟。Safari下DNS缓存时间大约为10秒。解：hosts文件修改的原理那么在修改hosts文件之后，发生了什么事情呢？这里不妨先提提Chrome下的一个工具：chrome://net-internals/#dns。这里列出了目前系统中的DNS缓存和Chrome中使用的情况。通过这个工具，可以看到： 在修改hosts文件后，所有OS中DNS缓存会被清空，而浏览器缓存则不发生变化。 网上盛传chrome://net-internals/#dns下的&amp;quot;Clear Host Cache&amp;quot;可以清空DNS缓存，这里博主做了一个测试，这里清空的仅仅是OS的缓存，而并非浏览器DNS缓存。当某条DNS记录显示&amp;quot;Expired&amp;quot;的时候，才表示浏览器DNS缓存已经被清除。所以使用Clear Host Cache其实是没有用的。那么回到最初的问题上来，为什么修改hosts文件之后，有时会立刻生效，有时却一直不生效呢？其实原因很简单，这是因为浏览器缓存的过期时间，是从某个域名上<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=712&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=712&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=712&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=712&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=712">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=712">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>