Andrei Vasilev created HTTPCLIENT-2200:
------------------------------------------
Summary: 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
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.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]