为什么 curl 和 wget 需要这么长时间才能解析 OSX 上的本地映射 DNS?

为什么 curl 和 wget 需要这么长时间才能解析 OSX 上的本地映射 DNS?

我与一个团队合作开发网络服务和客户端,当然,我们每个人都在自己的机器上工作。为了保持简单和一致性,我们在代码中使用类似的域,并更新/etc/hosts以将这些域解析为本地主机。

  1. 适用于我的网络浏览器;响应时间很快
  2. curl 和 wget 需要大约 4 秒才能解析 DNS,然后才能成功完成请求

我确实找到了--resolvecurl 的标志解决延迟问题,但我也可以同样使用127.0.0.1和定义必要的标题来获得相同的效果。

带标志(和更新的/etc/hosts文件)

# /etc/hosts
...
127.0.0.1 mp-api.example.local

命令

curl -k -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total}\\n \
  --resolve mp-api.example.local:8094:127.0.0.1 \
  -H 'Host: mp-api.example.local:8094' \
  'https://mp-api.example.local:8094/api/categories/tree.json'

使用 127.0.0.1

curl -k -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total}\\n \
  -H 'Host: mp-api.example.local:8094' \
  'https://127.0.0.1:8094/api/categories/tree.json' 

curl和等工具的 DNS 解析延迟的原因有哪些wget?解决延迟问题的有效方法有哪些?

答案1

根据网络工具中可能存在设置的建议,我发现“绕过代理设置......”中的值很有趣。

在此处输入图片描述

看来我在 curl 和 wget 的 DNS 解析方面遇到了问题,因为我一直在使用以 结尾的域名.local。也许它本质上是一个保留值。

因此我更改了设置,现在使用以 结尾的域名,.loc一切又恢复正常了 - 不再需要花 4 秒钟的时间等待 DNS 解析。

答案2

检查 /etc/nsswitch.conf 文件

这里配置了如何将名称转换为 ID。其中一行是主机名:

hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines

确保“文件”放在第一位。

更新。

在 Mac OS X Yosemite 上 Curl 本地主机名

看起来 curl 负责名称解析并且更喜欢 ipv6

尝试添加 --ipv4 键或将 ipv6 添加到主机

相关内容