[ https://issues.apache.org/jira/browse/HTTPCORE-738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17709050#comment-17709050 ]
Florin Slev edited comment on HTTPCORE-738 at 4/5/23 6:19 PM: -------------------------------------------------------------- [~reschke] {code} "*" is in sub-delims and thus does not need to be encoded {code} Yet, Apache URIBuilder encodes the asterisk *. Are you saying that it shouldn't ? However, according to https://www.rfc-editor.org/rfc/rfc3986#section-2.2 {code} URI producing applications should percent-encode data octets that correspond to characters in the reserved set unless these characters are specifically allowed by the URI scheme to represent data in that component. {code} In which case the encoding of asterisk is correct. was (Author: JIRAUSER299708): {code} "*" is in sub-delims and thus does not need to be encoded {code} Yet, Apache URIBuilder encodes the asterisk * However, according to https://www.rfc-editor.org/rfc/rfc3986#section-2.2 {code} URI producing applications should percent-encode data octets that correspond to characters in the reserved set unless these characters are specifically allowed by the URI scheme to represent data in that component. {code} In which case the encoding of asterisk is correct. > URIBuilder - path with asterisk * is encoded differently compared to > java.lang.URI > ---------------------------------------------------------------------------------- > > Key: HTTPCORE-738 > URL: https://issues.apache.org/jira/browse/HTTPCORE-738 > Project: HttpComponents HttpCore > Issue Type: Bug > Components: HttpCore > Affects Versions: 5.2.1 > Reporter: Florin Slev > Priority: Major > > It seems Apache URIBuilder encodes URL asterisk characters as %2A. > While java.lang.URI doesn't: > > {code:java} > final URI uri = new URI("http", null, "localhost", 80, "/books*", null, > null); > final URIBuilder uribuilder = new > URIBuilder().setScheme("http").setHost("localhost").setPort(80).setPath("/books*"); > final URI result = uribuilder.build(); > assertEquals(uri, result); > {code} > => > {code} > expected: <http://localhost:80/books*> but was: <http://localhost:80/books%2A> > {code} > According to https://www.rfc-editor.org/rfc/rfc1738.txt > {code} > Reserved: > Usually a URL has the same interpretation when an octet is > represented by a character and when it encoded. However, this is not > true for reserved characters: encoding a character reserved for a > particular scheme may change the semantics of a URL. > Thus, only alphanumerics, the special characters "$-_.+!*'(),", and > reserved characters used for their reserved purposes may be used > unencoded within a URL. > {code} > Is the the encoding of asterisk and the whole set of special chars from the > RFC above $-_.+!*'() intended inside Apache URIBuilder ? > My use case is that I'm using Apache HTTP client to send requests to a remote > endpoint containing * inside the URL. The server does not recognize the %2A > encoding. I have to explicitly decode it back to asterisk * in order to work. -- 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