Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

致歉那被我冤枉的 DNS 缓存

  在开发环境做各种调试时经常会修改本地的 hosts 文件。可问题是修改 hosts 文件后浏览器依然访问到旧的域名。我一直以为这是 DNS 缓存造成的,但在 Chrome 的 chrome://net-internals/#dns 页中清空了缓存也以让无法解决问题。于是我渐渐明白。。。
  造成这一切蛋疼问题的元凶是「keep-alive」。因为一个 TCP 连接根本就没被断开,后续的传输根本不需要进入「域名解析」这个步骤。所以也扯不上什么 DNS 缓存。
  以前每次遇到这种问题都是要么重启浏览器,要么开隐私模式(在 Chrome 上隐私模式不会与普通模式共享连接)。但有一次我发现大概过了一分多钟再刷新页面,域名就可以解析到正确的 IP 上。这个神奇的时间让我联想到了 Nginx 的默认 keep-alive,于是我试着关掉 Nginx 的 keep-alive,果然就不会再出现所谓「DNS 缓存」的情况了。
  为了证明上面的测试没问题,我又做了一次验证,把 keep-alive 的超时时间设为了 10 秒     keepalive_timeout 10;   结果果然是正确的。只要页面超过 10 秒没刷新就会重新解析域名。
  既然知道了是什么问题造成的,那么对症下药即可解决。现在是因为 TCP 长连接不断开,造成了访问页面不会重新解析域名。那么我们只要把 TCP 长连接给干掉即可。这在 Chrome 上很容易操作,只要进入 chrome://net-internals/#sockets,点击 「Close idle sockets」按钮,所有连接都会被干掉。于是不用再重启浏览器或打开隐私模式就可以解析 hosts 中设置的域名了。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^