[ 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