Por que o curl e o wget demoram tanto para resolver o DNS mapeado localmente no OSX?

1

Eu trabalho com uma equipe para desenvolver um serviço web e cliente, cada um de nós, é claro, trabalhando em nossas próprias máquinas. Para manter as coisas simples e mais consistentes, usamos domínios semelhantes no código e atualizamos /etc/hosts para resolver esses domínios para localhost.

  1. funciona bem para o meu navegador da web; os tempos de resposta são rápidos
  2. curl e o wget leva ~ 4 segundos para resolver o DNS antes de concluir com êxito a solicitação

Eu encontrei o sinal --resolve para o curl que resolve o atraso , mas eu também poderia usar 127.0.0.1 e definir os cabeçalhos necessários para obter o mesmo efeito.

com sinalizador (e arquivo /etc/hosts atualizado)

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

comando

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'

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

Quais são alguns dos motivos para o atraso na resolução de DNS para ferramentas como curl e wget ? E quais são algumas maneiras eficazes de solucionar esse atraso?

    
por David Vezzani 23.07.2016 / 16:19

2 respostas

1

Por sugestão de que pode haver configurações na ferramenta Rede, descobri que os valores em "Ignorar configurações de proxy ..." são interessantes.

Parece que tenho tido problemas com a resolução de DNS para curl e wget porque tenho usado um domínio que termina com .local . Talvez seja essencialmente um valor reservado.

Então eu mudei minhas configurações então agora eu uso um domínio que termina com .loc e tudo está bem novamente - não mais 4 segundos de folga em la-la land esperando pela resolução do DNS.

    
por 24.07.2016 / 05:17
0

Verifique o arquivo /etc/nsswitch.conf

Há configuração como os nomes para id convertidos. Uma das linhas para nomes de host:

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

Assegure-se de "arquivos" em primeiro lugar.

UPD.

Enrole os nomes dos hosts locais no Mac OS X Yosemite

parece que o curl é responsável pela resolução de nomes e prefere o ipv6

tente adicionar a chave --ipv4 ou adicione ipv6 aos hosts

    
por 23.07.2016 / 19:09