修改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缓存?的更多相关文章
- 如何修改hosts文件并生效
hosts文件位置C:\Windows\System32\drivers\etc(可以建立一个.bat 的文件把(start "" C:\Windows\System32\driv ...
- centos下修改hosts文件以及生效命令
修改 vim /etc/hosts 生效 service network restart 或者 /etc/init.d/network restart
- 缓存:修改Hosts不生效
修改Hosts为何不生效,是DNS缓存? - Barret李靖 - 博客园https://www.cnblogs.com/hustskyking/p/hosts-modify.html 换个未打开过的 ...
- 【点滴积累,厚积薄发】修改hosts,并刷新dns缓存
Windows系统下hosts位置 C:\Windows\System32\drivers\etc 修改hosts后,要想马上生效,需要运行命令来刷新DNS缓存:ipconfig /flushdns
- 做web开发和测试,修改hosts指定某个域名访问某个特定的IP后,如何使hosts立即生效的方法
本文转自SUN'S BLOG,原文地址:http://whosmall.com/post/143 hosts的配置方法: 在windows系统中,找到C:\windows\system32\drive ...
- 修改hosts文件,修改后不生效怎么办
当你在打开浏览器的情况下修改hosts文件时,关闭浏览器时系统才会释放掉hosts文件占用的那部分内存,我们再次打开浏览器访问就发现已经生效了. ps:ipconfig /flushdns # ...
- 修改Hosts不生效的一个场景-web(转)
Update: 如果浏览器使用了代理工具,修改 Hosts 也不会生效.这里是因为,浏览器会优先考虑代理工具(如添加 pac 文件.SwitchySharp等)的代理,建议调试的时候先关闭这些代理. ...
- 修改hosts立刻生效不必重启
有时我们会通过修改Hosts文件(路径为系统盘:\WINDOWS\system32\drivers\etc\hosts),在修改并保存Hosts文件后需要重启才能使设置生效. 这时可以打开命令提示符 ...
- 修改Hosts不生效的一个场景-web 专题
准备工作 1.在 QQ互联 申请成为开发者,并创建应用,得到APP ID 和 APP Key.2.了解QQ登录时的 网站应用接入流程.(必须看完看懂) 为了方便各位测试,直接把我自己申请的贡献出来:A ...
随机推荐
- Flume(1)使用入门
一.概述: Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. 当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X ...
- Win10 UI入门 圆形控件
动态模版绑定 http://blog.csdn.net/XXChen2/article/details/4552554
- 【leetcode】House Robber
题目简述 You are a professional robber planning to rob houses along a street. Each house has a certain a ...
- java网络编程1
Socket的构造方法包括: 1.Socket(),无参构造方法: 2.Socket(InetAddress address,int port) throws UnknownHostException ...
- Mybatis拦截器
Mybatis拦截器
- 5款强大的Java Web开发工具
1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...
- 从零点壹开始学JAVA(DAY 1 笔记)<补充记录>
一个同事的先生(下面称呼其为耿大神)是做开发的,比较资深的那种,在他们公司的核心技术部门. 幸运的是,耿大神很乐意帮助我这株小白菜,在业余时间指导我,这里深表感谢. 耿大神隔段时间会给我提一些问题,让 ...
- 第二天 ci执行流程
第二天 ci执行流程 welcome 页面 this this->load 单入口框架index.php 两个文件夹 system application定义 定义常亮路径 载入 codeign ...
- [资料分享]组件方式开发 Web App全站
- 【转】Oracle索引失效问题
转自:http://www.cnblogs.com/millen/archive/2010/01/18/1650423.html 失效情况分析: <> 单独的>,<,(有时会用 ...