java.net.SocketException: Connection reset by peer: socket write error


最近在項目中使用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時,都帶上這個參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM