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

Ryan Schmitt commented on HTTPCORE-692:
---------------------------------------

[~olegk] I've decided to take the route of letting the client add the 
appropriate header ({{Host}} or {{:authority}}), deriving its value from the 
request URI. My only concern has been that the client has to derive the exactly 
correct value for the header, otherwise the request signature will be invalid 
(see https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html ). 
It looks like this will be manageable without adding an interceptor.

> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to