使用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连接池的方式进行调用;发现不再出错;