[ 
https://issues.apache.org/jira/browse/HTTPCORE-692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17685318#comment-17685318
 ] 

Oleg Kalnichevski commented on HTTPCORE-692:
--------------------------------------------

[~adwsingh] Please see the context of my statement.

`Host` headers are invalid for H2 messages. Standard protocol handlers shipped 
with HttpClient do not permit transmission of HTTP messages with illegal 
protocol headers over H2 connections regardless of how those headers got 
populated.

Oleg

> 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
>            Priority: Minor
>              Labels: easyfix
>             Fix For: 5.2-beta1
>
>   Original Estimate: 1h
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> 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.20.10#820010)

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

Reply via email to