java.net.SocketException: Connection reset by peer: socket write error
阿新 • • 發佈:2022-04-09
最近在專案中使用Httpclient對接外部介面時,內網使用Squid做正向代理,用POST請求在上傳大於30kb的資料時,httpClient返回的資訊總是xx.xx.xx.xx:80 failed to respond,查詢代理日誌發現報407沒許可權的錯誤。取消代理認證後再次請求,發現又丟擲如圖異常:
但在本地開發上傳都是正常的,但在dev環境卻出現這種問題。
於是經過不懈的查閱資料,發現http協議中header有一個引數:Expect:100-continue
。
Expect是一個請求訊息頭,包含一個期望提條件,只有在伺服器滿足期望條件時才能友好的處理請求,若不滿足條件,則會返回使用者自定義的錯誤狀態碼。但其在規範中只定義了一個期望條件,即Expect:100-continue。
嘗試在請求頭header中新增這個請求頭資訊,問題得以解決。究其原因,可能是對於content-length的值過大,伺服器便會拒絕,故需要加請求頭宣告期望條件,讓伺服器代理上傳的請求。
建議在使用httpClient時,都帶上這個引數。