求口袋怪兽日月图鉴电脑版下载资源

> 博客详情
经常做Web开发的工程师,都会遇到需要将某个域名绑定到特定IP上,进行测试的情况。大家一般都会用修改hosts文件的方式来解决,但是经常也会遇到修改hosts不生效的情况,而且有时生效,有时不生效的情况也有发生,这到底是为什么呢?
###起:DNS缓存机制
关于DNS缓存的机制,有一篇非常详细的文章[What really happens when you navigate to a URL](/archive/what-really-happens-when-you-navigate-to-a-url/ "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](/web-browser-dns-caching-bad-thing/):
![image](/wp-content/uploads/2011/08/dns-cache-table.png)
后来我也做过测试,Mac下Chrome(23.0.)的DNS缓存时间是1分钟。Safari下DNS缓存时间大约为10秒。
###解:hosts文件修改的原理
那么在修改hosts文件之后,发生了什么事情呢?这里不妨先提提Chrome下的一个工具:[chrome://net-internals/#dns](chrome://net-internals/#dns)。这里列出了目前系统中的DNS缓存和Chrome中使用的情况。通过这个工具,可以看到:
**在修改hosts文件后,所有OS中DNS缓存会被清空,而浏览器缓存则不发生变化。**
网上盛传[chrome://net-internals/#dns](chrome://net-internals/#dns)下的"Clear Host Cache"可以清空DNS缓存,这里博主做了一个测试,**这里清空的仅仅是OS的缓存,而并非浏览器DNS缓存。当某条DNS记录显示"Expired"的时候,才表示浏览器DNS缓存已经被清除。所以使用Clear Host Cache其实是没有用的。**
那么回到最初的问题上来,为什么修改hosts文件之后,有时会立刻生效,有时却一直不生效呢?其实原因很简单,这是因为浏览器缓存的过期时间,是从某个域名上次查询DNS记录开始计算的。
例如:我00秒的时候使用chrome访问过.hk,此时浏览器DNS缓存产生,然后我修改了hosts文件,将.hk指向本地127.0.0.1,然后在05秒的时候尝试再次访问这个地址,因为浏览器DNS缓存未过期,所以hosts修改无法体现出来。
另一种情况下,我很久都没有访问了,然后我修改了hosts文件,将其指向127.0.0.1,这时因为浏览器没有DNS缓存,所以会查询操作系统中的DNS缓存,结果此时hosts文件生效!
前面也提到,Safari的浏览器DNS缓存时间大约为10秒,所以一般调试程序的时候,很多人都习惯修改hosts后,用Safari来调试,因为大部分情况下,修改hosts之后,浏览器DNS缓存已经失效了。
那么怎么主动清除浏览器DNS缓存呢?博主目前也没有找到办法,测试过Chrome下的“清除缓存”选项,发现没有起到期望的效果。
那么,就请在修改hosts之后,耐下心来,稍等几十秒吧。
最后打个广告,博主正在开发一款比修改hosts更方便的DNS更改工具,应该能够在新年推出,敬请期待!
人打赏支持
开源马克杯
领取时间:
开源马克杯是开源中国定制的“高大上”Coders 喝水利器!
领取条件:购买或拥有开源马克杯的OSCer可领取
开源项目作者
领取时间:
作为一个开源项目作者,是时候站出来拯救世界了!
领取条件:开源项目被开源中国收录的开发者可领取
参与源创会
领取时间:
“”在线下联结了各位 OSCer,推广开源项目和理念,很荣幸有你的参与~
领取条件:参与过开源中国“源创会”的 OSCer 可以领取
码字总数 114152
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥&  们比较容易忽视。那么,小编讲一下,修改hosts之后,如何立即生效。
  方法一:清空DNS缓存
  1、打开命令提示符,输入ipconfig /flushdns
  2、命令执行完毕,发现刚才修改的hosts已经生效了。
  方法二:修改注册表
  1、打开注册表编辑器,定位到HKeyCurrentUserSOFTWAREMicrosoftWindowsCurrentVersionInternet
Settings,
  新建:DnsCacheEnabled 0x0 (REG_DWORD)DnsCacheTimeout 0x0
(REG_DWORD)ServerInfoTimeOut 0x0 (REG_DWORD)这三个DWORD。
  2、小编不推荐这种设置方法,会加重网络负担。但是,如果使用本地DNS的朋友,可以加这三条注册表。比如,小编就用了DNS
speeder搭建了本地DNS,修改注册表就没有什么影响。
  方法三:停用DNS client
  1、打开:控制面板-管理工具&服务
  2、在其中找到&DNS Client& 将其停用并改为手动模式
  3、同样,小编不推荐这种方法,但本地DNS除外。
  一般来说修改host文件可以起到屏蔽网站广告等的作用。
  【这个文件夹很敏感。有些密码病毒,修改这个文件起到钓鱼的作用。】
  [C:\Windows\System32\drivers\etc]
  下面说一下如何修改host文件。
  打开路径如下:
  C:\Windows\System32\drivers\etc
  会有一个HOSTS文件。
  右击。用笔记本打开。
  在最下面添加如下格式 IP 空格 网址。
  比如 127.0.0.1
  那么你访问百度的时候 其实访问的是127.0.0.1(自己电脑的)
  如图:
  然后保存就可以了。
  【如果不能修改可以暂停安全软件。】
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)电脑教程子分类/etc/hosts更改生效问题
要评论问题请先或
赞同来自: 、
要参与问题请先或
- What's the fucking is going on?
要参与问题请先或
- Do all in command line
要参与问题请先或
- 理工小强
要参与问题请先或
- 运维小兵一枚~
要参与问题请先或
浏览: 32390
关注: 4 人

我要回帖

更多关于 口袋怪兽日月下载 的文章

 

随机推荐