Przeczytałem wszystkie związane z tym problemy dotyczące SO i GitHub na temat tego błędu i żaden z nich nie wydaje się rozwiązać tej sytuacji.Node.js HTTP GET "ECONNRESET" Błąd odczytu
Kiedy uruchomić następujący kod:
response = await axios.get('http://localhost:8082/panda, {
httpAgent: new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 })
});
pojawia się następujący błąd:
{ Error: socket hang up
at createHangUpError (_http_client.js:345:15)
at Socket.socketOnEnd (_http_client.js:437:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9) code: 'ECONNRESET' }
{ Error: read ECONNRESET
at _errnoException (util.js:1019:11)
at TCP.onread (net.js:608:25)
code: 'ECONNRESET',
errno: 'ECONNRESET',
syscall: 'read',
etc...
nie ma śladu stosu poza wezwanie onread
więc jest jasne, jak mogę uzyskać żadnych dodatkowych informacji poza kod błędu ECONNRESET
(-54) przekazany do metody onread
w pliku net.js
Ten problem występuje przy każdym żądaniu t - nie jest przerywany.
Kilka obserwacji:
- podczas dokonywania sam wniosek z Chrome lub listonosz wniosek nie powiedzie
- próbując odtworzyć udane wniosek Chrome przy użyciu tych samych nagłówków, nie powiedzie
- ustawienie nagłówka akceptującego do używania 'gzip' itp. Nie pomaga - próbowałem wszystkich zaleceń, w tym niektórych dziwnych, takich jak ustawianie długości treści i dodawanie treści do żądania, mimo że jest to żądanie GET
- błąd pojawia się zawsze w net.js, ale dzieje się zarówno wniosek i Axios bibliotek
Oto interesująca część - mogę tylko wydają się odtworzyć ten problem niezawodnie, gdy jestem gospodarzem serwer lokalnie. Jestem w stanie dotrzeć do instancji dewelopera lub uruchomić serwer w vagrantach za pośrednictwem kontenera dokera, bez problemu.
Używam macOS Sierra 10.12.6, jeśli to robi jakąkolwiek różnicę. Serwer jest napisany w Javie i używa frameworka Spring. Oto konfiguracja RestTemplate
używam dla połączeń HTTP:
@Bean
public RestTemplate restTemplate() {
//request timeout
int timeout = 5000;
//Connection Pooling factory with timeouts to prevent disastrous request responses
HttpComponentsClientHttpRequestFactory cf = new HttpComponentsClientHttpRequestFactory();
cf.setReadTimeout(timeout);
cf.setConnectTimeout(timeout);
cf.setConnectionRequestTimeout(timeout);
return new RestTemplate(cf);
}
Próbowałem aprowizacji z tych ustawień bez powodzenia.
Wszelkie pomysły?
„Connection reset” błędy mogą wskazywać, że proces serwera hit problem (np rozbił). Czy przejrzałeś dzienniki dowolnego procesu serwera, do którego próbujesz się połączyć? –
Testowałem to podczas debugowania procesu lokalnie - bez awarii i niczego w dziennikach ... Próbowałem dodać przechwytywacz do rejestrowania błędów, a także zmieniając różne poziomy rejestrowania w moim pliku application.properties - nie wydaje się, że jest to żądanie dociera do serwera – Jordan
Jaką wersję węzła, etc ... używasz? – Corvusoft