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

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

[~rschmitt] Generally one should not meddle with connection specific headers at 
all. Protocol handlers are going to populate those headers as required. 
However, when necessary one can use a request or execution interceptor to do 
so. The protocol version should be available in the execution of context passed 
to the interceptor.

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.1#820001)

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

Reply via email to