我与一个团队合作开发网络服务和客户端,当然,我们每个人都在自己的机器上工作。为了保持简单和一致性,我们在代码中使用类似的域,并更新/etc/hosts
以将这些域解析为本地主机。
- 适用于我的网络浏览器;响应时间很快
- curl 和 wget 需要大约 4 秒才能解析 DNS,然后才能成功完成请求
我确实找到了--resolve
curl 的标志解决延迟问题,但我也可以同样使用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
答案2
检查 /etc/nsswitch.conf 文件
这里配置了如何将名称转换为 ID。其中一行是主机名:
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines
确保“文件”放在第一位。
更新。
在 Mac OS X Yosemite 上 Curl 本地主机名
看起来 curl 负责名称解析并且更喜欢 ipv6
尝试添加 --ipv4 键或将 ipv6 添加到主机