1. 程式人生 > 其它 >java.net.SocketException: Connection reset by peer: socket write error

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時,都帶上這個引數。