我通过使用PoolingHttpClientConnectionManager
在我们的项目中使用Apache HttpClient。我了解大多数财产,但我很困惑setExpectContinueEnabled
是什么意思?是否始终将其保留为true
或false
?任何人都可以提供一些解释,这通常意味着什么?
private ClientHttpRequestFactory clientHttpRequestFactory() {
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(1000).setConnectTimeout(1000)
.setSocketTimeout(1000).setStaleConnectionCheckEnabled(false).build();
SocketConfig socketConfig = SocketConfig.custom().setSoKeepAlive(true).setTcpNoDelay(true).build();
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(800);
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(700);
CloseableHttpClient httpClientBuilder = HttpClientBuilder.create()
.setConnectionManager(poolingHttpClientConnectionManager).setDefaultRequestConfig(requestConfig)
.setDefaultSocketConfig(socketConfig).build();
requestFactory.setHttpClient(httpClientBuilder);
return requestFactory;
}
最佳答案
setXyzEnabled形式的方法设置一个标志,该标志控制是否使用/不允许使用可选功能,在这种情况下,该功能用于使用RequestConfig的请求。 “期望继续”是HTTP / 1.1协议中的一个选项,其中客户端在发送正文之前仅发送请求的标头并等待响应(通常为“ 100继续”)。如果服务器(仅)基于报头确定错误,则允许它跳过发送正文。
请参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.20(请求)
和http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3(响应)
或更多如画的http://httpstatusdogs.com/100-continue。
如果您的服务器不支持或不总是支持或不完全支持继续,则这是一个坏主意。如果您的服务器确实确实支持“继续”并且您的请求具有很大或很大的请求,则服务器很可能会拒绝,这可能是一个好主意。