我通过使用PoolingHttpClientConnectionManager在我们的项目中使用Apache HttpClient。我了解大多数财产,但我很困惑setExpectContinueEnabled是什么意思?是否始终将其保留为truefalse?任何人都可以提供一些解释,这通常意味着什么?

    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

如果您的服务器不支持或不总是支持或不完全支持继续,则这是一个坏主意。如果您的服务器确实确实支持“继续”并且您的请求具有很大或很大的请求,则服务器很可能会拒绝,这可能是一个好主意。

07-24 20:29