[
https://issues.apache.org/jira/browse/HTTPCORE-692?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Oleg Kalnichevski resolved HTTPCORE-692.
----------------------------------------
Fix Version/s: 5.2-alpha3
Resolution: Fixed
> 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-alpha3
>
> Original Estimate: 1h
> Time Spent: 20m
> Remaining Estimate: 40m
>
> 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: [email protected]
For additional commands, e-mail: [email protected]