使用RestTemplate請求rest接口時出現The server failed to respond with a valid HTTP response問題:第一次請求rest接口正常返回,再次請求時就會返回這個錯誤;
而且再次請求其他的rest接口也會出現這個錯誤;
網上分析說:這個錯誤大致是說server給的不是正確的http response.這個錯誤是可能是由於:使用同一個HttpClient長連接/保持連接, 然后又使用這個httpClient進行其他網絡請求。
在當前項目中RestTemplate httpclient連接池方式:所以每次都會復用連接池中的http連接;
然后開始驗證;改造RestTemplate生成;改成每次都創建新的http連接
public class RestTemplateUtils { public static RestTemplate createRestTemplate(){ HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setReadTimeout(10000); requestFactory.setConnectTimeout(15000); return new RestTemplate(requestFactory); } }
發現不再出現這個錯誤;證明確實是這個問題;
聯系rest接口提供方:發現提供方返回的response響應頭設置了Connection:keep-alive 從而導致連接一致保持;
rest提供方刪除這個設置后,再次采用RestTemplate httpclient連接池的方式進行調用;發現不再出錯;