[ 
https://issues.apache.org/jira/browse/HTTPCORE-763?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17806885#comment-17806885
 ] 

Oleg Kalnichevski commented on HTTPCORE-763:
--------------------------------------------

> Should we throw a {{new IllegalArgumentException("authority must be set");}} 
> in this case?

[~turing85] No, we should not. The authority may be set by the protocol handler 
depending on the execution pipeline. It may be null at the request construction 
time but will be checked and enforced at the execution time. See 
`RequestValidateHost` for reference. Theoretically the path check could also be 
executed there and trigger a `ProtocolException` at execution time.

Oleg

> Behaviour of BasicHttpRequest wrt. path is inconsistent
> -------------------------------------------------------
>
>                 Key: HTTPCORE-763
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-763
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 5.1, 5.2, 5.3-alpha1
>            Reporter: Marco Bungart
>            Priority: Minor
>
> The [Setter for {{path}} in 
> {{BasicHttpRequest}}|https://github.com/apache/httpcomponents-core/blob/26b3bc6d6dc56587afdb12d84361009d55a5197f/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java#L210]
>  checks whether the parameter {{path}} starts with two slashes and - if so - 
> throws an {{IllegalArgumentException}} (through the call to 
> [{{Args.check(...)}}|https://github.com/apache/httpcomponents-core/blob/26b3bc6d6dc56587afdb12d84361009d55a5197f/httpcore5/src/main/java/org/apache/hc/core5/util/Args.java#L39].
>  Similarly, method 
> [{{setUri(...)}}|https://github.com/apache/httpcomponents-core/blob/26b3bc6d6dc56587afdb12d84361009d55a5197f/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java#L264]
>  checks the raw path from tur {{URI}}.
> This leads to inconsistent behaviour. A constructor call like:
> {code:java}
> new BasicHttpRequest("GET", "http", URIAuthority.create("google.com"), 
> "//search/asdf?q=foobar");
> {code}
> works fine, while a constructor call like:
> {code:java}
> new BasicHttpRequest("GET", "http", URIAuthority.create("google.com"), 
> "doesNotMatter")
>             .setPath("//search/asdf?q=foobar");
> {code}
> or
> {code:java}
> new BasicHttpRequest("GET", 
> URI.create("https://www.google.com//search/asdf?q=foobar";));
> {code}
> throws an {{{}IllegalArgumentException{}}}.
> The Class {{BasicHttpRequest}} was extended in [commit 
> {{1614d5d}}|https://github.com/apache/httpcomponents-core/commit/1614d5d5a5de6f4faadff9ecb566982d56b65179]
>  and is present since.
> I think what should happen is that the path should only be checked for {{//}} 
> if the {{authority}} is not set since [RFC 3986 in section 
> 3|https://www.rfc-editor.org/rfc/rfc3986#section-3] specifies:
> {code}
>    The scheme and path components are required, though the path may be
>    empty (no characters).  When authority is present, the path must
>    either be empty or begin with a slash ("/") character.  When
>    authority is not present, the path cannot begin with two slash
>    characters ("//").
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to