You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "yinwoods (Jira)" <ji...@apache.org> on 2021/11/02 02:41:00 UTC

[jira] [Created] (HTTPCORE-692) H2 should throw illegal header exception when use Host header as Connection header

yinwoods created HTTPCORE-692:
---------------------------------

             Summary: H2 should throw illegal header exception when use Host header as Connection header
                 Key: HTTPCORE-692
                 URL: https://issues.apache.org/jira/browse/HTTPCORE-692
             Project: HttpComponents HttpCore
          Issue Type: Improvement
          Components: HttpCore
    Affects Versions: 5.1
         Environment: Macos 11.6
openjdk 11.0.12 2021-07-20
            Reporter: yinwoods


I notice org/apache/hc/core5/http2/impl/DefaultH2RequestConverter.java:105 throws ProtocolException when header contains Connection. When header contains

host/upgrade/transfer-encoding header, should it throws ProtocolException eigther?

 

demo code as below, when I comment Host header, I got 200 response, and when uncomment, got 400 bad request.
{code:java}
//
public class HttpUtilTest {

    public static void main(String[] args) throws Exception {

        HttpContext httpContext = new BasicHttpContext();
        BasicCookieStore cookie = new BasicCookieStore();
        httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookie);
        SimpleHttpRequest request = SimpleRequestBuilder.create(Method.GET)
            .setUri("https://zzpro2.wmeimob.cn/api/user")
            .addHeader("User-Agent", "zhenzhu/3.3.3.0 CFNetwork/1128.0.1 Darwin/19.6.0")
            .addHeader("loading", "false")
            .addHeader("Accept-Language", "zh-cn")
            .addHeader("toast", "true")
            // .addHeader("Host", "zzpro2.wmeimob.cn")
            .addHeader("Accept-Encoding", "gzip, deflate, br")
            .build();

        SSLContext sslcontext = CipherSuitesUtil.createSslContext();
        final TlsStrategy tlsStrategy = new DefaultClientTlsStrategy(sslcontext, NoopHostnameVerifier.INSTANCE);
        final PoolingAsyncClientConnectionManager connectionManager = PoolingAsyncClientConnectionManagerBuilder
            .create()
            .setTlsStrategy(tlsStrategy)
            .build();

        IOReactorConfig ioConfig =
            IOReactorConfig.custom()
                .setSoKeepAlive(true)
                .setSoTimeout(Timeout.ofMilliseconds(5000))
                .setIoThreadCount(4)
                .setSelectInterval(TimeValue.ofMilliseconds(500))
                .build();

        RequestConfig requestConfig =
            RequestConfig.custom()
                .setCookieSpec(StandardCookieSpec.RELAXED)
                .setConnectTimeout(Timeout.ofMilliseconds(5000))
                .setResponseTimeout(Timeout.ofMilliseconds(5000))
                .setRedirectsEnabled(true)
                .setMaxRedirects(10)
                .build();

        HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom()
            .setDefaultRequestConfig(requestConfig)
            .setRedirectStrategy(CustomRedirectStrategy.INSTANCE)
            .setConnectionManager(connectionManager)
            .setVersionPolicy(HttpVersionPolicy.NEGOTIATE)
            .setIOReactorConfig(ioConfig);

        CloseableHttpAsyncClient client = clientBuilder.build();

        client.start();

        client.execute(request, httpContext, new FutureCallback<>() {
            @Override
            public void completed(SimpleHttpResponse result) {
                try {
                    System.out.println(result);
                } catch (Exception e) {

                }
            }

            @Override
            public void failed(Exception ex) {
                ex.printStackTrace();
            }

            @Override
            public void cancelled() {
                System.out.println("cancelled");
            }
        });

        Thread.sleep(50 * 1000);

        client.close();
    }

}
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org