修改Hosts为何不生效,是DNS缓存?
Update:
- 如果浏览器使用了代理工具,修改 Hosts 也不会生效。这里是因为,浏览器会优先考虑代理工具(如添加 pac 文件、SwitchySharp等)的代理,建议调试的时候先关闭这些代理。
- 使用 pac 文件代理有的时候部分文件的代理不生效,应该是 pac 对应的代理服务器上,做了部分处理。
- 部分浏览器也有 DNS 缓存,如 chrome(chrome://dns),这是为什么重启浏览器也不生效的原因,一般设定时间为 60s (如 Firefox)。
- 浏览器有DNS缓存,系统也会存在 DNS 缓存,有的时候即便在 chrome://dns 清空了浏览器 DNS 缓存,依然不生效,是因为系统 DNS 缓存还未刷新,刷新方式可以看这篇文章。
相信很多同学都在使用 SwitchHosts/iHosts/Gas Mask 等 Hosts 管理工具,当然也有人直接修改 /etc/hosts
或者 system32/drivers/etc/hosts
文件,而经常遇到的疑问是:咿,刚才不是修改并且保存了么,为何 Chrome 浏览器还不生效呢?
- 有人说重启下浏览器就好了,
- 有人说清空下缓存 DNS(chrome://net-internals/#DNS)就好了,
- 有人说隐私模式下打开就好了,
- 有人说等一分钟吧...
结果就是,进入隐私模式的都好了,重启、清空缓存DNS和等一分钟的同学还在继续纠结中。。。
上面提到的三个工具,SwitchHosts/iHosts/Gas Mask,其实也只有 iHosts 生效了(Mac下)。
开发过程中我们会无数次的切换 Hosts,如果不知道原理,我们在测试的时候还是很心惊胆战的=_=||
修改Hosts不生效的根本原因
因为服务器设置了 keep-alive
!次要原因是存在浏览器 DNS 缓存和系统 DNS 缓存。
> Keep-alive 相关文档
服务器在响应头设置了 Connection: keep-alive
(一般的网页都会设置 keep-alive,保持长连接,避免多次连接产生网络消耗)之后,客户端会跟服务器保持长连接,只要长连接不断开,页面在请求的时候就不会重新解析域名!
我们可以这样来测试:
- 打开一个你至少两分钟没有打开的浏览器(你也可以关闭掉你的浏览器,然后重新打开,记得把所有的 tab 都关了,除了当前 tab ^_^)
- 在 hosts 添加
127.0.0.1 www.taobao.com
- 新开 tab,打开 www.taobao.com,是不是进不去了 <这里说明 hosts 修改生效了>
- 注释掉刚才hosts修改,
# 127.0.0.1 www.taobao.com
,再打开 www.taobao.com,很好,正常打开了 <这里说明 hosts 修改也生效了> - 去掉注释符,
127.0.0.1 www.taobao.com
,再打开 www.taobao.com,依然可以访问!!! - Chrome 中进入 chrome://net-internals/#sockets,,可以看到淘宝首页中很多域名都是与服务器保持着长连接,点击上方的
close idle sockets
按钮,可以关闭所有的长连接 - 此时,再去访问 www.taobao.com,是不是进不去了!
为何一些修改可以让 “Hosts 生效”
1. 重启浏览器
重启浏览器之后,所有的连接(包括长连接)都会断开,自然就生效了
2. 隐私模式打开
因为隐私模式下不会复用 TCP 连接,新开连接的时候,会重新解析 DNS 域名,自然也生效了
3. iHosts 管理器在 Mac 下生效
因为我在 Windows 下测试过,貌似没有立即生效。问了 iHosts 的作者@必隆,他告诉我,在修改 hosts 文件的时候,会重启网络服务,这个时候必然会断开所有的 TCP 连接(重启网络服务,差不多相当于先断网再联网...)
4. 修改之后,等一会儿...
“等一会儿”,要稍微等久一点,keep-alive
的默认设置是 120s,开发者也有可能增大或者减小这个配置,所以“等一会儿”也是很伤神的=。 =
看到这里,你对其中的原理是否有所了解了呢?
修改Hosts为何不生效,是DNS缓存?相关推荐
- windows修改hosts并马上生效
windows修改hosts并马上生效 如何修改hosts 修改之后如何马上生效 如何修改hosts 使用快捷键windows + r 打开命令输入窗口,然后输入以下内容C:\Windows\Syst ...
- 修改hosts文件不生效
修改hosts文件不生效 host文件位置 C:\Windows\System32\drivers\etc 1.修改后的hosts文件类型为 '文件',不能是txt类型,txt类型不生效,把txt后缀 ...
- CentOS修改hosts文件及生效命令
修改hosts文件 vim /etc/hosts 如: 127.0.0.1 http://www.baidu.com 修改完成后生效命令 /etc/init.d/network restart
- 通过负载均衡器+域名实现容灾切换-(3)浏览器的DNS缓存过程
=========================================== 浏览器访问的DNS缓存机制 参考:https://blog.csdn.net/realmeh/article/d ...
- 修改hosts文件(win10版)
hosts作用介绍 hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需 ...
- 如何添加修改hosts文件?几种修改方法让你简单方便管理
如何修改hosts文件?几种修改方法让你简单方便快捷,hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库&q ...
- [系统] 修改 hosts 文件
记录了在各种系统下修改 hosts 文件的方式 1 hosts 文件的作用 hosts文件将域名与其对应的 IP 地址建立关联表,用户在浏览器中输入访问的域名时,系统会首先自动从 hosts 文件中寻 ...
- 零基础学习PHP编程——基本概念详解之域名解析与DNS缓存
基本概念详解之一--域名解析与DNS缓存 注意: 本文主要介绍了域名解析流程即DNS缓存相关知识 [转载请注明] 欢迎交流QQ群: 640765823 一. DNS是什么? DNS(Domain Na ...
- [原创]从程序员角度分析安徽电信HTTP劫持的无耻行径,以及修改Hosts文件,使用OPENDNS无效情况下的解决方案...
问题描述 新年刚过,我就发现使用的安徽电信E9套餐有HTTP劫持的情况(网上有人说DNS劫持,有人说网页劫持),我想大致就是这种情况. 重现非常简单,在地址栏输入一些不存在的网址(比如http: // ...
最新文章
- 心得体悟帖---15、我的灵魂
- python2的idle打不开了
- vb仿excel控件_如何通过INTOUCH组态软件做EXCEL报表(含代码)
- php打png图片水印颜色失真,ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整...
- Docker搭建WebLogic服务器
- WPF4.5 Cockbook - Chapter8(Style, Triggers and Control Template)
- mysql win linux性能对比,不同系统上 MySQL 的性能对比
- 引入神策埋点数据事件分析
- pyautogui实现微信自动回复和其他功能
- 艾默生手操器TREXLFPNAWS1S
- 如何学习计算机实现攻防
- weka mysql 汉字_Weka访问MySQL数据库
- 实训PHP的目的,实习的目的和意义
- 前端Vue2项目开发常用依赖
- lifi与wifi的论文_对比LiFi和WiFi之间的差别 可见光通信大热原因揭秘
- 历年美元对人民币汇率表
- 第一篇博文——与诸位共勉
- 软件测试的工作内容?以及软件测试是干什么的?学习规划和职业规划
- 实时频谱仪的外部I、Q输出端口的同步扫描介绍
- Halcon 模板匹配专栏