我使用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;
}
答案 0 :(得分:2)
表单setXyzEnabled的方法设置一个标志,该标志控制是否使用/允许可选功能,在本例中是使用RequestConfig的请求。 “Expect Continue”是HTTP / 1.1协议中的一个选项,客户端在发送正文之前仅发送请求的标头并等待响应,通常为“100 Continue”。如果服务器根据标题(仅)确定错误,则允许它跳过发送正文。
见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。
如果您的服务器没有,或者不总是,或者不一定知道,支持继续,那么这是一个坏主意。如果您的服务器确实支持继续并且您有大型或大型机构的请求可能是一个好主意,服务器很可能拒绝。