2015-04-29 14 views
6

Per qualche motivo, sul mio computer di sviluppo ricevo risposte molto, molto lente per le richieste HTTPS eseguite tramite Net :: HTTP. Ho provato RestClient e HTTParty e hanno entrambi lo stesso problema. Sembra che sia spuntato dal nulla. Ho fatto queste richieste centinaia di volte senza problemi, ma oggi sono insopportabilmente lenti.Net :: HTTP risposte estremamente lente per richieste HTTPS

pry(main)> puts Time.now; HTTParty.get('https://api.easypost.com/v2/addresses'); puts Time.now; 
2015-04-29 08:07:08 -0500 
2015-04-29 08:09:39 -0500 

Come si può vedere, la risposta è durata 2,5 minuti. E non è solo questo URL dell'API EasyPost. Ho provato numerose richieste SSL ai server che so di potermi connettere (https://google.com, https://weather.com, ecc.) E tutti hanno lo stesso comportamento. Inoltre, ho notato che la stessa cosa accade per le richieste che vengono reindirizzate da HTTP a HTTPS. Ora, controlla una richiesta non-ssl:

pry(main)> puts Time.now; HTTParty.get('http://lookitsatravis.com'); puts Time.now; 
2015-04-29 08:12:22 -0500 
2015-04-29 08:12:22 -0500 

Istantaneo. Cosa dà? Suppongo che ci sia qualche problema di configurazione tra Ruby e OpenSSL. Ho reinstallato entrambi (usando Ruby 2.2.1 e OpenSSL 1.0.2a) e sto usando OS X Yosemite 10.10.2 per quello che vale. Reinstallato tutte le mie gemme, ma il problema persiste. Ho provato a cambiare le mie impostazioni DNS per ogni evenienza, ma senza dadi. C'è un altro posto che posso guardare o una configurazione che posso modificare che risolverà questo problema?

+0

Potrebbe essere un problema di rete, ad esempio un middlebox che esegue il traffic shaping. Controllare con altri software della stessa macchina per vedere se è specifico per la macchina o realmente accade solo con rubino. –

+0

@SteffenUllrich Ho appena controllato cURL/wget/Postman ... cURL e Postman funzionano bene, ma wget non funziona. Ha lo stesso identico comportamento. È interessante notare che wget tenta di connettersi prima all'indirizzo IPv6 che non riesce. Quando si collega all'indirizzo IPv4, viene completato immediatamente. Quindi, credo che il problema sia con IPv6 in qualche modo ... – lookitsatravis

+0

Grazie a @SteffenUllrich - è stato IPv6 a causare il problema. Disabilitarlo ha risolto il problema. – lookitsatravis

risposta

5

Il problema non era Ruby o OpenSSL o nessuna delle librerie precedenti. Il problema è che gli indirizzi IPv6 non si stavano risolvendo sul mio MacBook. La ricerca DNS ha restituito prima l'indirizzo IPv6, quindi le librerie hanno provato a connettersi fino a quando non sono scadute e quindi si sono collegate agli indirizzi IPv4 che funzionavano correttamente.

Disabilitare IPv6 per OS X Yosemite 10.10.2 ha funzionato per me. Non è l'ideale, ma finché non riesco a determinare un'altra soluzione, funziona.

networksetup -setv6off "Wi-Fi" 

Grazie a @SteffenUllrich per avermi indicato in quella direzione.

-2

Ciò che ha risolto il problema per me era la disattivazione dell'Antivirus