为什么要使用浏览器DNS缓存,无非就是提供域名的解析速度(因为直接ip是代表主机的,域名只是ip的马甲,拖了马甲才能睡觉~)
什么是DNS?简而言之是从域名(www.camnpr.com)解析为IP(116.255.161.231)的过程,详情可移步 wikipedia。
题外话:那么怎么查看域名解析的时间呢?
(通过fiddle2查看访问百度时的DNS Lookup是2ms)
解析时间一般都是毫秒级的,有个浏览器dns缓存机制,会大大提供解析时间。还记得为什么我们要在域名后边加一个斜杠吗? 比如:我告诉你我的网站:http://www.camnpr.com 你访问这个,比我告诉你网站:http://camnpr.com/ 访问的要慢点。 这是域名解析的过程中的优化。如图:
解析的文字描述:
1.客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
2.当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
3.如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
4.本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
5.重复第四步,直到找到正确的纪录。
6.本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
这篇文章用以记录浏览器级别的DNS缓存策略:
about:config
中network.dnsCacheExpiration
配置来进行修改各大浏览器默认开启了DNS缓存功能,所以在先访问有个不存在域名后,再把该域名添加到本地hosts文件指向本地后,用该浏览器访问依然会提示域名不存在。。。
为什么修改hosts不立即生效?--浏览器DNS缓存机制分析
解决方案:
Firefox解决方式:
Firefox有dns缓存功能,但是默认缓存时间只有1分钟,可以通过修改该默认值加快DNS解析速度,方法如下:
打开一个新的窗口,地址栏输 入 about:config,回车,进入设置界面。然后搜索 network.dnsCacheExpiration ,把原来的60改成 6000(表示缓存6000秒),再搜索network.dnsCacheEntries 把默认的20改成1000(表示缓存1000条)。如果没 有上面两个项目,新建它们即可,新建条目类型为整数型。 当然也可以按照需要设置成其它的值。
但是dns缓存太久了也会出问题,比如有的网站ip换了,就无法访问了。
针对这样的问题,还可以安装一个 firefox 插件来开启或者 关闭dns cache功能,https://addons.mozilla.org/zh-CN/firefox/addon/5914 。
IE解决方式:
禁用DNS缓存的方法,将下面内容保存为注册表文件,在运行写入注册表:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"DnsCacheEnabled"=dword:00000000
"DnsCacheTimeout"=dword:00000000
"ServerInfoTimeOut"=dword:00000000
写入注册表以后IE将不再缓存DNS,我们对hosts便会立即生效,无需再重启浏览器。
如果需要恢复IE的DNS缓存,只需清楚我们之前写入的注册表内容。跟上面的方法一样:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"DnsCacheEnabled"=-
"DnsCacheTimeout"=-
"ServerInfoTimeOut"=-
Chrome浏览器:
为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。你在谷歌Chrome浏览器的地址栏中输入about:DNS,回车,就可以看到本地的DNS缓存。
firefox下有个DNS Flusher插件,但没有chrome版本,其实在chrome下清除DNS缓存非常简单:
1、用chrome打开:chrome://net-internals/#dns
2、点击上面的“clean host cache”
也可以清空在工具中选择清空Cache,这样DNS cache会一同清空。
微软windows下如何清空dns
在微软windows下,你可以用命令ipconfig /flushd ns来清空dns 缓存内容。
你也可以用命令ipconfig /displaydns 来查看dns缓存内容。
Mac OSX下如何清空dns缓存
在Mac OSX中,你可以用这个命令lookupd -flushcache 来清空保留的缓存。
bash-2.05a$ lookupd -flushcache
Linux 下如何清空dns缓存
在linux中,nscd进程负责管理DNS缓存。
要清空DNS缓存,重启nscd守护进程就行了。
要重启nscd进程,使用命令(不带引号)'/etc/rc.d/init.d/nscd restart '