Class Uri

java.lang.Object
akka.http.scaladsl.model.Uri
All Implemented Interfaces:
Serializable, scala.Equals, scala.Product
Direct Known Subclasses:
Uri.Empty$

public abstract class Uri extends Object implements scala.Product, Serializable
An immutable model of an internet URI as defined by https://tools.ietf.org/html/rfc3986. All members of this class represent the *decoded* URI elements (i.e. without percent-encoding), with the exception of 'rawQueryString': rawQueryString should be a string that only contains characters permitted by https://tools.ietf.org/html/rfc3986#section-3.4, any other characters must be percent-encoded (for example through UriParser.parseRawQueryString)
See Also:
  • Constructor Details

  • Method Details

    • apply

      public static Uri apply(String input)
      Parses a valid URI string into a normalized URI reference as defined by http://tools.ietf.org/html/rfc3986#section-4.1. Percent-encoded octets are UTF-8 decoded. Accepts unencoded visible 7-bit ASCII characters in addition to the RFC. If the given string is not a valid URI the method throws an IllegalUriException.
      Parameters:
      input - (undocumented)
      Returns:
      (undocumented)
    • apply

      public static Uri apply(akka.parboiled2.ParserInput input)
      Parses a valid URI string into a normalized URI reference as defined by http://tools.ietf.org/html/rfc3986#section-4.1. Percent-encoded octets are decoded using the given charset (where specified by the RFC). Accepts unencoded visible 7-bit ASCII characters in addition to the rfc. If the given string is not a valid URI the method throws an IllegalUriException.
      Parameters:
      input - (undocumented)
      Returns:
      (undocumented)
    • apply

      public static Uri apply(akka.parboiled2.ParserInput input, Uri.ParsingMode mode)
      Parses a valid URI string into a normalized URI reference as defined by http://tools.ietf.org/html/rfc3986#section-4.1. Percent-encoded octets are decoded using the given charset (where specified by the RFC). If the given string is not a valid URI the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      input - (undocumented)
      Returns:
      (undocumented)
    • apply

      public static Uri apply(akka.parboiled2.ParserInput input, Charset charset, Uri.ParsingMode mode)
      Parses a valid URI string into a normalized URI reference as defined by http://tools.ietf.org/html/rfc3986#section-4.1. Percent-encoded octets are decoded using the given charset (where specified by the RFC). If the given string is not a valid URI the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      input - (undocumented)
      charset - (undocumented)
      Returns:
      (undocumented)
    • apply

      public static Uri apply(String scheme, Uri.Authority authority, Uri.Path path, scala.Option<String> queryString, scala.Option<String> fragment)
      Creates a new Uri instance from the given components. All components are verified and normalized except the authority which is kept as provided. If the given combination of components does not constitute a valid URI as defined by http://tools.ietf.org/html/rfc3986 the method throws an IllegalUriException.

      Parameters:
      queryString - percent-encoded query string. When characters are encountered that are outside of the RFC3986 range they are automatically percent-encoded
      scheme - (undocumented)
      authority - (undocumented)
      path - (undocumented)
      fragment - (undocumented)
      Returns:
      (undocumented)
    • from

      public static Uri from(String scheme, String userinfo, String host, int port, String path, scala.Option<String> queryString, scala.Option<String> fragment, Uri.ParsingMode mode)
      Creates a new Uri instance from the given components. All components are verified and normalized. If the given combination of components does not constitute a valid URI as defined by http://tools.ietf.org/html/rfc3986 the method throws an IllegalUriException.
      Parameters:
      scheme - (undocumented)
      userinfo - (undocumented)
      host - (undocumented)
      port - (undocumented)
      path - (undocumented)
      queryString - (undocumented)
      fragment - (undocumented)
      mode - (undocumented)
      Returns:
      (undocumented)
    • parseAbsolute

      public static Uri parseAbsolute(akka.parboiled2.ParserInput input, Charset charset, Uri.ParsingMode mode)
      Parses a string into a normalized absolute URI as defined by http://tools.ietf.org/html/rfc3986#section-4.3. Percent-encoded octets are decoded using the given charset (where specified by the RFC). If the given string is not a valid URI the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      input - (undocumented)
      charset - (undocumented)
      Returns:
      (undocumented)
    • parseAndResolve

      public static Uri parseAndResolve(akka.parboiled2.ParserInput string, Uri base, Charset charset, Uri.ParsingMode mode)
      Parses a string into a normalized URI reference that is immediately resolved against the given base URI as defined by http://tools.ietf.org/html/rfc3986#section-5.2. Note that the given base Uri must be absolute (i.e. define a scheme). Percent-encoded octets are decoded using the given charset (where specified by the RFC). If the given string is not a valid URI the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      string - (undocumented)
      base - (undocumented)
      charset - (undocumented)
      Returns:
      (undocumented)
    • parseHttpRequestTarget

      public static Uri parseHttpRequestTarget(akka.parboiled2.ParserInput requestTarget, Charset charset, Uri.ParsingMode mode)
      Parses the given string into an HTTP request target URI as defined by http://tools.ietf.org/html/rfc7230#section-5.3. If the given string is not a valid URI the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      requestTarget - (undocumented)
      charset - (undocumented)
      Returns:
      (undocumented)
    • parseHttp2PathPseudoHeader

      public static scala.Tuple2<Uri.Path,scala.Option<String>> parseHttp2PathPseudoHeader(akka.parboiled2.ParserInput headerValue, Charset charset, Uri.ParsingMode mode)
      Parses the given string as if it were the value of an HTTP/2 ":path" pseudo-header. The result is a path and a query string as defined in https://tools.ietf.org/html/rfc7540#section-8.1.2.3 If the given string is not a valid path or query string the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      headerValue - (undocumented)
      charset - (undocumented)
      Returns:
      path and percent-encoded query string. When in in 'relaxed' mode, characters not permitted by https://tools.ietf.org/html/rfc3986#section-3.4 are already automatically percent-encoded here
    • parseHttp2AuthorityPseudoHeader

      public static Uri.Authority parseHttp2AuthorityPseudoHeader(akka.parboiled2.ParserInput headerValue, Charset charset, Uri.ParsingMode mode)
      Parses the given string as if it were the value of an HTTP/2 ":authority" pseudo-header. The result is an authority object. https://tools.ietf.org/html/rfc7540#section-8.1.2.3 If the given string is not a valid path or query string the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      headerValue - (undocumented)
      charset - (undocumented)
      Returns:
      (undocumented)
    • normalize

      public static String normalize(akka.parboiled2.ParserInput uri, Charset charset, Uri.ParsingMode mode)
      Normalizes the given URI string by performing the following normalizations: - the scheme and host components are converted to lowercase - a potentially existing port component is removed if it matches one of the defined default ports for the scheme - percent-encoded octets are decoded if allowed, otherwise they are converted to uppercase hex notation - . and .. path segments are resolved as far as possible

      If the given string is not a valid URI the method throws an IllegalUriException.

      Parameters:
      mode - if Relaxed, accepts unencoded visible 7-bit ASCII characters in addition to the RFC.
      uri - (undocumented)
      charset - (undocumented)
      Returns:
      (undocumented)
    • effectiveHttpRequestUri

      public static Uri effectiveHttpRequestUri(String scheme, Uri.Host host, int port, Uri.Path path, scala.Option<String> query, scala.Option<String> fragment, boolean securedConnection, Uri.Host hostHeaderHost, int hostHeaderPort, Uri.Authority defaultAuthority)
      Converts a set of URI components to an "effective HTTP request URI" as defined by http://tools.ietf.org/html/rfc7230#section-5.5.
      Parameters:
      scheme - (undocumented)
      host - (undocumented)
      port - (undocumented)
      path - (undocumented)
      query - (undocumented)
      fragment - (undocumented)
      securedConnection - (undocumented)
      hostHeaderHost - (undocumented)
      hostHeaderPort - (undocumented)
      defaultAuthority - (undocumented)
      Returns:
      (undocumented)
    • effectiveRequestUri

      public static Uri effectiveRequestUri(String scheme, Uri.Host host, int port, Uri.Path path, scala.Option<String> query, scala.Option<String> fragment, String defaultScheme, Uri.Host hostHeaderHost, int hostHeaderPort, Uri.Authority defaultAuthority)
      Converts a set of URI components to an "effective request URI" as defined by http://tools.ietf.org/html/rfc7230#section-5.5.
      Parameters:
      scheme - (undocumented)
      host - (undocumented)
      port - (undocumented)
      path - (undocumented)
      query - (undocumented)
      fragment - (undocumented)
      defaultScheme - (undocumented)
      hostHeaderHost - (undocumented)
      hostHeaderPort - (undocumented)
      defaultAuthority - (undocumented)
      Returns:
      (undocumented)
    • httpScheme

      public static String httpScheme(boolean securedConnection)
    • websocketScheme

      public static String websocketScheme(boolean securedConnection)
    • resolveUnsafe

      public static Uri resolveUnsafe(String scheme, String userinfo, Uri.Host host, int port, Uri.Path path, scala.Option<String> query, scala.Option<String> fragment, Uri base)
      https://tools.ietf.org/html/rfc3986#section-5.2.2

      'Unsafe' in the sense that queryString validation must already have been done.

      Parameters:
      query - percent-encoded query string that must be guaranteed not to contain invalid percent-encodings or characters not allowed by the RFC.
      scheme - (undocumented)
      userinfo - (undocumented)
      host - (undocumented)
      port - (undocumented)
      path - (undocumented)
      fragment - (undocumented)
      base - (undocumented)
      Returns:
      (undocumented)
    • decode

      public static String decode(String string, Charset charset)
    • decode

      public static String decode(String string, Charset charset, int ix, StringBuilder sb)
    • normalizeScheme

      public static String normalizeScheme(String scheme)
    • normalizePort

      public static int normalizePort(int port, String scheme)
    • verifyPath

      public static Uri.Path verifyPath(Uri.Path path, String scheme, Uri.Host host)
    • collapseDotSegments

      public static Uri.Path collapseDotSegments(Uri.Path path)
    • fail

      public static scala.runtime.Nothing$ fail(String summary, String detail)
    • create

      public static Uri create(String scheme, String userinfo, Uri.Host host, int port, Uri.Path path, scala.Option<String> queryString, scala.Option<String> fragment)
      Parameters:
      queryString - percent-encoded query string. When characters are encountered that are outside of the RFC3986 range they are automatically percent-encoded
      scheme - (undocumented)
      userinfo - (undocumented)
      host - (undocumented)
      port - (undocumented)
      path - (undocumented)
      fragment - (undocumented)
      Returns:
      (undocumented)
    • create

      public static Uri create(String scheme, Uri.Authority authority, Uri.Path path, scala.Option<String> queryString, scala.Option<String> fragment)
      Parameters:
      queryString - percent-encoded query string. When characters are encountered that are outside of the RFC3986 range they are automatically percent-encoded
      scheme - (undocumented)
      authority - (undocumented)
      path - (undocumented)
      fragment - (undocumented)
      Returns:
      (undocumented)
    • createUnsafe

      public static Uri createUnsafe(String scheme, Uri.Authority authority, Uri.Path path, scala.Option<String> queryString, scala.Option<String> fragment)
      'Unsafe' in the sense that queryString validation must already have been done.

      Parameters:
      queryString - percent-encoded query string that must be guaranteed not to contain invalid percent-encodings or characters not allowed by the RFC.
      scheme - (undocumented)
      authority - (undocumented)
      path - (undocumented)
      fragment - (undocumented)
      Returns:
      (undocumented)
    • scheme

      public String scheme()
    • authority

      public Uri.Authority authority()
    • path

      public Uri.Path path()
    • rawQueryString

      public scala.Option<String> rawQueryString()
    • fragment

      public scala.Option<String> fragment()
    • isAbsolute

      public boolean isAbsolute()
    • isRelative

      public boolean isRelative()
    • isEmpty

      public abstract boolean isEmpty()
    • query

      public Uri.Query query(Charset charset, Uri.ParsingMode mode)
      Parses the rawQueryString member into a Query instance.
      Parameters:
      charset - (undocumented)
      mode - (undocumented)
      Returns:
      (undocumented)
    • queryString

      public scala.Option<String> queryString(Charset charset)
      Returns the query part of the Uri in its decoded form.
      Parameters:
      charset - (undocumented)
      Returns:
      (undocumented)
    • effectivePort

      public int effectivePort()
      The effective port of this Uri given the currently set authority and scheme values. If the authority has an explicitly set port (i.e. a non-zero port value) then this port is the effective port. Otherwise the default port for the current scheme is returned.
      Returns:
      (undocumented)
    • copy

      public Uri copy(String scheme, Uri.Authority authority, Uri.Path path, scala.Option<String> rawQueryString, scala.Option<String> fragment)
      Returns a copy of this Uri with the given components.

      If you want to use the copy constructor to update the 'rawQueryString', it is up to you to make sure the query string does not contain invalid characters. For this reason we recommend using Uri#withRawQueryString() instead.

      Parameters:
      scheme - (undocumented)
      authority - (undocumented)
      path - (undocumented)
      rawQueryString - (undocumented)
      fragment - (undocumented)
      Returns:
      (undocumented)
    • withScheme

      public Uri withScheme(String scheme)
      Returns a copy of this Uri with the given scheme. The scheme change of the Uri has the following effect on the port value: - If the Uri has a non-default port for the scheme before the change this port will remain unchanged. - If the Uri has the default port for the scheme before the change it will have the default port for the '''new''' scheme after the change.
      Parameters:
      scheme - (undocumented)
      Returns:
      (undocumented)
    • withAuthority

      public Uri withAuthority(Uri.Authority authority)
      Returns a copy of this Uri with the given authority.
      Parameters:
      authority - (undocumented)
      Returns:
      (undocumented)
    • withAuthority

      public Uri withAuthority(Uri.Host host, int port, String userinfo)
      Returns a copy of this Uri with a Authority created using the given host, port and userinfo.
      Parameters:
      host - (undocumented)
      port - (undocumented)
      userinfo - (undocumented)
      Returns:
      (undocumented)
    • withAuthority

      public Uri withAuthority(String host, int port)
      Returns a copy of this Uri with a Authority created using the given host and port.
      Parameters:
      host - (undocumented)
      port - (undocumented)
      Returns:
      (undocumented)
    • withHost

      public Uri withHost(Uri.Host host)
      Returns a copy of this Uri with the given host.
      Parameters:
      host - (undocumented)
      Returns:
      (undocumented)
    • withHost

      public Uri withHost(String host)
      Returns a copy of this Uri with the given host.
      Parameters:
      host - (undocumented)
      Returns:
      (undocumented)
    • withPort

      public Uri withPort(int port)
      Returns a copy of this Uri with the given port.
      Parameters:
      port - (undocumented)
      Returns:
      (undocumented)
    • withPath

      public Uri withPath(Uri.Path path)
      Returns a copy of this Uri with the given path.
      Parameters:
      path - (undocumented)
      Returns:
      (undocumented)
    • withUserInfo

      public Uri withUserInfo(String userinfo)
      Returns a copy of this Uri with the given userinfo.
      Parameters:
      userinfo - (undocumented)
      Returns:
      (undocumented)
    • withQuery

      public Uri withQuery(Uri.Query query)
      Returns a copy of this Uri with the given query.
      Parameters:
      query - (undocumented)
      Returns:
      (undocumented)
    • withRawQueryString

      public Uri withRawQueryString(String rawQuery)
      Returns a copy of this Uri with the given query string.

      Characters that are not within the range described at https://tools.ietf.org/html/rfc3986#section-3.4 should be percent-encoded. Characters that are in that range may or may not be percent-encoded, and depending on how the query string is parsed this might be relevant: for example, when interpreting the query string as 'key=value' pairs you could use the percent-encoded '=' ('%22) to include a '=' in a key or value.

      When characters are encountered that are outside of the RFC3986 range they are automatically percent-encoded, but be aware that relying on this is usually a programming error.

      Parameters:
      rawQuery - (undocumented)
      Returns:
      (undocumented)
    • withRawQueryString

      public Uri withRawQueryString(String rawQueryString, Uri.ParsingMode mode)
      Returns a copy of this Uri with the given query string.

      Characters that are not within the range described at https://tools.ietf.org/html/rfc3986#section-3.4 must be percent-encoded. Characters that are in that range may or may not be percent-encoded, and depending on how the query string is parsed this might be relevant: for example, when interpreting the query string as 'key=value' pairs you could use the percent-encoded '=' ('%22) to include a '=' in the key or value.

      Parameters:
      mode - depending on the mode, characters outside of the range allowed by RFC3986 will either cause an IllegalUriException or be automatically percent-encoded. Be aware that relying on automatic percent-encoding is usually a programming error.
      rawQueryString - (undocumented)
      Returns:
      (undocumented)
    • withFragment

      public Uri withFragment(String fragment)
      Returns a copy of this Uri with the given fragment.
      Parameters:
      fragment - (undocumented)
      Returns:
      (undocumented)
    • resolvedAgainst

      public Uri resolvedAgainst(Uri base)
      Returns a new absolute Uri that is the result of the resolution process defined by http://tools.ietf.org/html/rfc3986#section-5.2.2 The given base Uri must be absolute.
      Parameters:
      base - (undocumented)
      Returns:
      (undocumented)
    • toEffectiveHttpRequestUri

      public Uri toEffectiveHttpRequestUri(Uri.Host hostHeaderHost, int hostHeaderPort, boolean securedConnection, Uri.Authority defaultAuthority)
      Converts this URI to an "effective HTTP request URI" as defined by http://tools.ietf.org/html/rfc7230#section-5.5
      Parameters:
      hostHeaderHost - (undocumented)
      hostHeaderPort - (undocumented)
      securedConnection - (undocumented)
      defaultAuthority - (undocumented)
      Returns:
      (undocumented)
    • toEffectiveRequestUri

      public Uri toEffectiveRequestUri(Uri.Host hostHeaderHost, int hostHeaderPort, String defaultScheme, Uri.Authority defaultAuthority)
      Converts this URI to an "effective request URI" as defined by http://tools.ietf.org/html/rfc7230#section-5.5
      Parameters:
      hostHeaderHost - (undocumented)
      hostHeaderPort - (undocumented)
      defaultScheme - (undocumented)
      defaultAuthority - (undocumented)
      Returns:
      (undocumented)
    • toRelative

      public Uri toRelative()
      Converts this URI into a relative URI by keeping the path, query and fragment, but dropping the scheme and authority.
      Returns:
      (undocumented)
    • toHttpRequestTargetOriginForm

      public Uri toHttpRequestTargetOriginForm()
      Converts this URI into an HTTP request target "origin-form" as defined by https://tools.ietf.org/html/rfc7230#section-5.3.

      Note that the resulting URI instance is not a valid RFC 3986 URI! (As it might be a "relative" URI with a part component starting with a double slash.)

      Returns:
      (undocumented)
    • withoutFragment

      public Uri withoutFragment()
      Drops the fragment from this URI
      Returns:
      (undocumented)
    • toString

      public String toString()
      Overrides:
      toString in class Object