hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Francois-Xavier Bonnet (JIRA)" <j...@apache.org>
Subject [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
Date Fri, 22 Feb 2013 08:46:13 GMT

     [ 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


Mime
View raw message