[ 
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]

Reply via email to