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