Cod*_*lan 5 networking osx-lion
我的本地机器上运行着一个 Web 服务器,当我使用localhost地址对它执行cURL 请求时,它执行得非常快。但是,当我添加 /etc/hosts 之类的
127.0.0.1 test.local
然后执行相同的 cURL 请求:
curl -I http://test.local:3002/images/logo.png
它延迟了 2-3 秒。localhost再次将 cURL 请求改回不会产生延迟。
这是每次都可以重现的。
我试过在下面运行慢速请求dtruss,看看是否能找到导致延迟的系统调用。没有什么异常表现出来。
我试过通过netcat它只是返回来制作一个虚拟服务,HTTP/1.0 200 OK所以我可以保证问题不是真的由于我的网络服务器造成的。同样,没有区别:localhost快如您所愿,但会test.local延迟。
在这一点上,我认为存在某种 DNS 问题。也就是说,/etc/hosts不是首先被咨询,也就是说,我的上游 DNS 正在被检查,失败了,然后/etc/hosts正在被咨询,最终有效。
这可能吗?被OS X Lion以某种方式咨询我/etc/hosts的解析器链以后呢?
好的,我想通了。我在一篇博文中发现了这个评论:
问题是 Lion 处理 .local TLD 的方式不同,因为它是为某些多播 DNS 功能保留的(由 Bonjour 使用)。我发现解决此问题的唯一方法是为开发主机使用不同的 TLD(即:.dev)。它对我来说很好用,希望它对其他人有帮助!
切换我的开发域以结束.dev工作正常。
tl;dr - 不要.local用于 Lion 中的开发域。
OSX lion 有这个已知的错误。在使用 /etc/hosts 条目之前,它会首先咨询 DNS 服务器。这种行为只在 OSX 狮子中发现,在雪豹甚至老虎中都没有发现。
可能的选项:
另请参阅http://www.justincarony.com/blog/2011/07/27/mac-os-x-lion-etc-hosts-bugs-and-dns-resolution/了解更多详细信息。那里覆盖得很好。
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |