[
https://issues.apache.org/jira/browse/HTTPCLIENT-2200?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17482610#comment-17482610
]
Oleg Kalnichevski commented on HTTPCLIENT-2200:
-----------------------------------------------
> However, when executing a request, these interceptors are called at point
> when the application protocol has not been established yet.
[~avasilev] This actually looks like a defect. The protocol interceptors should
be able to find out the actual protocol version by querying their
HttpContext#protocolVersion.
Oleg
> Provide way to add H2 Request Interceptors
> ------------------------------------------
>
> Key: HTTPCLIENT-2200
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2200
> Project: HttpComponents HttpClient
> Issue Type: New Feature
> Components: HttpClient (async)
> Affects Versions: 5.2-alpha1
> Reporter: Andrei Vasilev
> Priority: Major
>
> Currently, a user is able to add HttpRequestInterceptor when building a new
> client using HttpAsyncClientBuilder. However, when executing a request, these
> interceptors are called at point when the application protocol has not been
> established yet. Since the interceptors do not have access to this
> information, then the user must commit to an application protocol
> pre-emptively when constructing their request in terms of header
> capitalization, including the Host/Connection header or not, how cookies are
> appended, etc. This is clearly problematic since it cannot be known
> pre-emptively what protocol the server on the other end will end up choosing
> when a connection is established.
> On line 925 of HttpAsyncClientBuilder, I can see that a DefaultHttpProcessor
> is provided to the IOEventHandlerFactory, which contains
> HttpRequestInterceptors that DO have access to the application protocol
> information, because they are called at a later point in time when this
> information has been established and is now available. I see that if the
> protocol was assumed by the user to be H2, but the connection ends up being
> established using 1.1, then a Host and Connection header are added to the
> request if they are missing. However, the opposite is not provided. That is,
> if the protocol is assumed to be 1.1 and the Host / Connection headers are
> included by the user, but the connection upgrades to H2, it results in an
> illegal request due to invalid headers.
> To solve this issue, it would be nice if a user was able to add additional
> interceptors to the DefaultHttpProcessor on line 925, so that they too are
> able to have access to protocol information and potentially augment their
> request where needed.
> https://github.com/apache/httpcomponents-client/blob/master/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]