[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12853069#action_12853069
 ] 

Ryan Stewart commented on HTTPCLIENT-929:
-----------------------------------------

Yes, I think that's the right approach. The problem should only happen when the 
path is composed of nothing but two or more slashes, but it should also be safe 
to replace any series of multiple slashes with a single one. Alternately, while 
I was looking into it, I discovered that URI has a relativize method that works 
like so: 
        URI uri1 = URI.create("http://www.google.com/foo";); 
        URI uri2 = URI.create("http://www.google.com";).relativize(uri1); 

Final content of uri2: path="foo". When you tell it to relativize 
"http://www.google.com//";, you get an empty URI, which is accurate. Could you 
just use this instead of reconstructing the URI manually?

> Request with two forward slashes for path fails
> -----------------------------------------------
>
>                 Key: HTTPCLIENT-929
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-929
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.0.1
>            Reporter: Ryan Stewart
>             Fix For: 4.1 Alpha2
>
>
> The following code demonstrates the problem:
>         DefaultHttpClient client = new DefaultHttpClient();
>         client.execute(new HttpGet("http://www.google.com//";));
> When a request is made, the DefaultRequestDirector invokes 
> rewriteRequestURI(). I don't fully understand why this method does what it 
> does. For a non-proxied request, it attempts to render the URI to a relative 
> URI. In doing so, it tries to create a relative URI whose content is "//". 
> Per RFC 2396 section 5 (Relative URI References), a relative URI that begins 
> with "//" is a network-path reference, and the "//" must be immediately 
> followed by an authority. Therefore, while "http://www.google.com//"; is a 
> valid absolute URI, "//" is not a valid relative one. The resulting exception:
> [...]
> Caused by: org.apache.http.ProtocolException: Invalid URI: 
> http://www.google.com//
>       at 
> org.apache.http.impl.client.DefaultRequestDirector.rewriteRequestURI(DefaultRequestDirector.java:339)
>       at 
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:434)
>       at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
>       ... 31 more
> Caused by: java.net.URISyntaxException: Expected authority at index 2: //
>       at java.net.URI$Parser.fail(URI.java:2809)
>       at java.net.URI$Parser.failExpecting(URI.java:2815)
>       at java.net.URI$Parser.parseHierarchical(URI.java:3063)
>       at java.net.URI$Parser.parse(URI.java:3024)
>       at java.net.URI.<init>(URI.java:578)
>       at org.apache.http.client.utils.URIUtils.createURI(URIUtils.java:106)
>       at org.apache.http.client.utils.URIUtils.rewriteURI(URIUtils.java:141)
>       at org.apache.http.client.utils.URIUtils.rewriteURI(URIUtils.java:159)
>       at 
> org.apache.http.impl.client.DefaultRequestDirector.rewriteRequestURI(DefaultRequestDirector.java:333)
>       ... 33 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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

Reply via email to