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

Francois-Xavier Bonnet resolved HTTPCLIENT-1325.
------------------------------------------------

       Resolution: Fixed
    Fix Version/s: 4.3 Alpha2

Fixed in trunk.
I am not totally happy with this solution: it will be ok for most users but in 
specific cases where the target host is not the host in the URI and the URI is 
not compliant with the specification because of special characters then the 
request will not be sent to the right host. This sometimes happens for me 
because I am using HttpClient in a reverse proxy so I guess for me the most 
safe solution is to always set the Host header manually. 
                
> Using a HttpRequest that is not an HttpUriRequest when host in URI is not 
> target host results in an invalid request
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1325
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1325
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.3 Alpha1
>            Reporter: Francois-Xavier Bonnet
>             Fix For: 4.3 Alpha2
>
>
> Using the following code:
>         CloseableHttpClient httpClient = HttpClientBuilder.create().build();
>         HttpHost httpHost = new HttpHost("127.0.0.1", 80, "http");
>         HttpRequest request = new BasicHttpRequest("GET", 
> "http://www.foo.com/test";);
>         httpClient.execute(httpHost, request);
> HttpClient sends this request:
>         GET http://www.foo.com/test HTTP/1.1
>         Host: 127.0.0.1:80
>         Connection: Keep-Alive
>         User-Agent: Apache-HttpClient/4.3-alpha2-SNAPSHOT (java 1.5)
>         Accept-Encoding: gzip,deflate
> The host header is not consistent with the request URI. This is due to 
> org.apache.http.impl.execchain.ProtocolExec:
>         HttpHost target = null;
>         if (virtualHost != null) {
>             target = virtualHost;
>         } else {
>             final HttpRequest original = request.getOriginal();
>             if (original instanceof HttpUriRequest) {
>                 final URI uri = ((HttpUriRequest) original).getURI();
>                 if (uri.isAbsolute()) {
>                     target = new HttpHost(uri.getHost(), uri.getPort(), 
> uri.getScheme());
>                 }
>             }
>         }
>         if (target == null) {
>             target = route.getTargetHost();
>         }
> So for a HttpUriRequest the host is taken from the URI but for other requests 
> it is taken from the target server.
> I think it should be taken from the target server only if it cannot be 
> determined from the URI (non-absolute URI).
> I will fix this.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to