You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Francois-Xavier Bonnet (JIRA)" <ji...@apache.org> on 2013/02/22 09:46:13 UTC

[jira] [Resolved] (HTTPCLIENT-1325) Using a HttpRequest that is not an HttpUriRequest when host in URI is not target host results in an invalid request

     [ 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: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org