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