[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2200?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski updated HTTPCLIENT-2200:
------------------------------------------
    Affects Version/s: 5.1.2
           Issue Type: Bug  (was: New Feature)
              Summary: Protocol interceptors are executed before the connection 
route has been fully established  (was: Provide way to add H2 Request 
Interceptors)

> Protocol interceptors are executed before the connection route has been fully 
> established
> -----------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2200
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2200
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (async)
>    Affects Versions: 5.1.2, 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]

Reply via email to