Chrome修改hosts不生效的根本原因是复用TCP长连接,跳过DNS解析:需关闭空闲socket、重启浏览器进程或刷新系统网络栈。

你在谷歌浏览器中修改了hosts文件,把某个测试域名指向127.0.0.1或开发机IP,保存后立刻刷新网页却仍跳转到线上服务器——这不是改错了,也不是没生效,而是Chrome根本没重新查这个域名。
根本原因:Chrome不查DNS,它复用TCP连接
第一步:打开 chrome://net-internals/#sockets,观察当前所有长连接。你会发现,像 www.example.com 这类刚访问过的域名,旁边状态显示“Idle”或“Active”,连接持续时间可能已达90秒以上。
第二步:只要这个 TCP 连接没断开,Chrome后续所有请求(包括新标签页、F5刷新、甚至地址栏回车)都直接走这条老通道,完全跳过DNS解析环节。hosts文件再怎么改,它也压根不看。
第三步:keep-alive 默认超时是120秒,但实际行为受服务器响应头控制。有些CDN或Nginx配置会设成300秒甚至更长——你等两分钟刷新,照样失效。
验证是否真由长连接导致
方法一:新开无痕窗口(Ctrl+Shift+N),直接访问该域名。如果立刻跳转到127.0.0.1,说明问题锁定在连接复用。
方法二:在 chrome://net-internals/#dns 页面搜索该域名,若状态为“OK”且“Expires in”还剩几十秒,就证明浏览器缓存未过期,hosts不会触发。
注意:chrome://net-internals/#dns 里的“Clear host cache”只清系统DNS缓存,对Chrome内部DNS缓存无效。
立即生效的三种操作路径
方法一:强制关闭全部空闲连接
进入 chrome://net-internals/#sockets → 点击【Close idle sockets】按钮 → 等1秒 → 刷新网页。这一步直接切断所有待命连接,下一次请求必走DNS解析,hosts立即生效。
方法二:重启Chrome全部进程
Windows:Ctrl+Shift+Esc 打开任务管理器 → 结束所有“chrome.exe”进程(包括后台进程)→ 重新启动浏览器。macOS:在活动监视器中强制退出Google Chrome所有实例。这比单纯关窗口更彻底,避免内存中残留旧hosts快照。
方法三:用命令行刷新并重置网络栈
以管理员身份运行CMD → 依次执行:
ipconfig /flushdns → netsh int ip reset → netsh winsock reset
执行完必须重启电脑,否则TCP/IP协议栈变更不生效。此法适合hosts反复失效、且怀疑系统DNS服务异常的场景。



















