2017-10-10 107 views
7

我已經閱讀了SO和GitHub上有關此錯誤的所有相關問題,而且他們都沒有解決這種情況。Node.js HTTP GET「ECONNRESET」讀取時出錯

當我運行下面的代碼:

response = await axios.get('http://localhost:8082/panda, { 
    httpAgent: new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 }) 
}); 

我收到以下錯誤:

{ 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... 

有沒有堆棧跟蹤超出onread調用因此目前還不清楚我怎麼能得到任何額外的資訊將ECONNRESET錯誤代碼(-54)傳遞給net.js中的onread方法

此問題與每個請求t--它不是間歇性的。

幾個意見:

  • 使得從鉻相同的請求或郵遞員請求不失敗
  • 試圖複製從Chrome中一個成功的請求,通過使用相同的標題時,失敗
  • 設置accept頭使用「gzip的」,等等。沒有幫助 - 我已經嘗試了所有的建議,包括一些奇怪的像設置內容長度和增加身體的要求儘管這是一個GET請求
    • 錯誤總是出現在net.js,但請求和愛可信庫

這裏有一個有趣的現象發生了 - 我只能似乎可靠地重現這個問題時,我主持服務器本地。我可以通過Docker容器訪問dev實例或通過流浪者運行服務器,沒有問題。

我正在運行macOS Sierra 10.12.6,如果這有什麼區別。服務器是用Java編寫的,並使用Spring框架。這裏是RestTemplate配置我使用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); 
} 

我已經試過,沒有運氣這些設置瞎搞。

任何想法?

+0

「連接重置」錯誤可能表明服務器進程觸及問題(例如,它崩潰)。你有沒有看過你試圖打電話的任何服務器進程的日誌? –

+0

我是測試這一點的同時本地調試過程 - 沒有崩潰,沒有在日誌......我嘗試添加攔截記錄錯誤,並在我的application.properties文件改變各種日誌記錄級別 - 它似乎並不像請求是否曾經到達服務器 – Jordan

+0

節點的哪個版本等等......你在使用什麼版本? – Corvusoft

回答