web-dev-qa-db-ja.com

OSXでローカルにマップされたDNSを解決するのにcurlとwgetに時間がかかるのはなぜですか?

私はチームと協力してWebサービスとクライアントを開発しています。もちろん、私たち一人一人が自分のマシンで作業しています。物事をシンプルで一貫性のあるものにするために、コードで同様のドメインを使用し、/etc/hostsを更新してそれらのドメインをローカルホストに解決します。

  1. 私のウェブブラウザでは問題なく動作します。応答時間は速い
  2. curlとwgetは、リクエストを正常に完了する前にDNSを解決するのに最大4秒かかります

Curlの--resolveフラグを見つけました 遅延を解決します ですが、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' 

curlwgetなどのツールのDNS解決が遅れる理由は何ですか?そして、その遅延をトラブルシューティングするいくつかの効果的な方法は何ですか?

2
David Vezzani

ネットワークツールに設定があるかもしれないという提案に従って、「プロキシ設定をバイパスする...」の値が興味深いと思いました。

enter image description here

.localで終わるドメインを使用しているため、curlとwgetのDNS解決に問題があるようです。おそらくそれは本質的に予約された値です。

そこで、設定を変更して、.locで終わるドメインを使用するようになりました。これで、すべてが正常になりました。DNS解決を待つララランドで4秒オフになることはありません。

1
David Vezzani

/etc/nsswitch.confファイルを確認してください

名前からIDへの変換方法の構成があります。ホスト名の行の1つ:

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

そもそも「ファイル」を確認してください。

UPD。

Mac OS X Yosemiteでローカルホスト名をカールする

curlが名前の解決に責任を持ち、ipv6を好むように見えます

--ipv4キーを追加するか、ipv6をホストに追加してみてください

0