Pourquoi curl et wget mettent-ils tant de temps à résoudre le DNS mappé localement sur OSX?

2

Je travaille avec une équipe pour développer un service Web et un client, chacun de nous travaillant bien sûr sur ses propres machines. Pour que les choses restent simples et cohérentes, nous utilisons des domaines similaires dans le code et les mettons à jour. /etc/hosts pour résoudre ces domaines à localhost.

  1. fonctionne bien pour mon navigateur Web; les temps de réponse sont rapides
  2. Il faut environ 4 secondes à curl et wget pour résoudre le problème DNS avant de répondre correctement à la demande.

J'ai trouvé le --resolve drapeau pour curl qui résout le retard , mais je pourrais tout aussi bien utiliser 127.0.0.1 et définir les en-têtes nécessaires pour obtenir le même effet.

avec drapeau (et mis à jour /etc/hosts fichier)

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

commander

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'

avec 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' 

Quelles sont certaines des raisons du retard dans la résolution DNS pour des outils tels que curl et wget? Et quels sont les moyens efficaces de résoudre ce retard?

David Vezzani
la source

Réponses:

1

Par suggestion qu'il pourrait y avoir des paramètres dans l'outil Réseau, j'ai trouvé les valeurs de "Contourner les paramètres proxy ..." intéressantes.

enter image description here

Il semblerait que j’ai eu des problèmes de résolution DNS pour curl et wget parce que j’utilisais un domaine se terminant par .local. Peut-être que c'est essentiellement une valeur réservée.

J'ai donc modifié mes paramètres et j'utilise maintenant un domaine se terminant par .loc et tout va bien à nouveau - pas plus de 4 secondes d'attente dans le pays la-la en attente de la résolution DNS.

David Vezzani
la source
0

Vérifiez le fichier /etc/nsswitch.conf

Il configuration comment les noms à id convertis. Une des lignes pour les noms d’hôtes:

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

Assure-toi, "fichiers" en premier lieu.

UPD.

Curl des noms d’hôtes locaux sur Mac OS X Yosemite

ressembler à curl prendre la responsabilité de la résolution de nom et préférer ipv6

essayez d'ajouter la clé --ipv4 ou d'ajouter ipv6 aux hôtes

Mikhail Moskalev
la source
Un service doit-il être recyclé pour prendre en charge les modifications? /etc/nsswitch.conf n'existe pas sur mon ordinateur. Je l'ai ajouté, avec les valeurs que vous avez suggérées, mais je reçois toujours un délai de 4 secondes pour les demandes curl et wget. Les demandes de navigateur ne rencontrent pas le même retard.
David Vezzani
étrange ça n'existe pas. Autant que je sache, nss fait partie de glib. Essayez strace curl ... Quelle distro vous utilisez?
Mikhail Moskalev
Je suis sur Mac OS (El Capitan); Je n'ai pas strace sur mon chemin, donc je ne peux pas exécuter cette commande. `` `curl --version curl 7.43.0 (x86_64-apple-darwin15.0) libcurl / 7.43.0 SecureTransport zlib / 1.2.5 Protocoles: fichier dict ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s srb smbs sms smtps telnet tftp Caractéristiques: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets `` `j'ai installé avec brew.
David Vezzani
Pardon. Je l'ai sous-entendu basé sur Linux. J'ai ajouté un tag et une note à la question.
Mikhail Moskalev