Interface HttpURI
- All Known Implementing Classes:
HttpURI.Immutable
,HttpURI.Mutable
HttpURI.Mutable
and HttpURI.Immutable
implementations are available
via the static methods such as build()
and from(String)
.
A URI such as
http://user@host:port/path;param1/%2e/info;param2?query#fragment
is split into the following optional elements:getScheme()
- http:getAuthority()
- //name@host:portgetHost()
- hostgetPort()
- portgetPath()
- /path;param1/%2e/info;param2getDecodedPath()
- /path/infogetParam()
- param2getQuery()
- querygetFragment()
- fragment
The path part of the URI is provided in both raw form (getPath()
) and
decoded form (getDecodedPath()
), which has: path parameters removed,
percent encoded characters expanded and relative segments resolved. This approach
is somewhat contrary to RFC3986
which no longer defines path parameters (removed after
RFC2396) and specifies
that relative segment normalization should take place before percent encoded character
expansion. A literal interpretation of the RFC can result in URI paths with ambiguities
when viewed as strings. For example, a URI of /foo%2f..%2fbar
is technically a single
segment of "/foo/../bar", but could easily be misinterpreted as 3 segments resolving to "/bar"
by a file system.
Thus this class avoid and/or detects such ambiguities. Furthermore, by decoding characters and
removing parameters before relative path normalization, ambiguous paths will be resolved in such
a way to be non-standard-but-non-ambiguous to down stream interpretation of the decoded path string.
The violations are recorded and available by API such as hasAmbiguousSegment()
so that requests
containing them may be rejected in case the non-standard-but-non-ambiguous interpretations
are not satisfactory for a given compliance configuration.
Implementations that wish to process ambiguous URI paths must configure the compliance modes
to accept them and then perform their own decoding of getPath()
.
If there are multiple path parameters, only the last one is returned by getParam()
.
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptionasString()
static HttpURI.Mutable
build()
static HttpURI.Mutable
static HttpURI.Mutable
static HttpURI.Mutable
static HttpURI.Mutable
static HttpURI.Mutable
static HttpURI.Immutable
static HttpURI.Immutable
static HttpURI.Immutable
static HttpURI.Immutable
getHost()
getParam()
Get a URI path parameter.getPath()
int
getPort()
getQuery()
getUser()
default boolean
default boolean
default boolean
default boolean
default boolean
boolean
default boolean
boolean
hasViolation
(UriCompliance.Violation violation) boolean
boolean
boolean
default URI
toURI()
-
Method Details
-
build
-
build
-
build
-
build
-
build
-
build
-
from
-
from
-
from
-
from
-
asImmutable
HttpURI.Immutable asImmutable() -
asString
String asString() -
getAuthority
String getAuthority() -
getDecodedPath
String getDecodedPath() -
getFragment
String getFragment() -
getHost
String getHost() -
getParam
String getParam()Get a URI path parameter. Multiple and in segment parameters are ignored and only the last trailing parameter is returned.- Returns:
- The last path parameter or null
-
getPath
String getPath() -
getPathQuery
String getPathQuery() -
getPort
int getPort() -
getQuery
String getQuery() -
getScheme
String getScheme() -
getUser
String getUser() -
hasAuthority
boolean hasAuthority() -
isAbsolute
boolean isAbsolute() -
isAmbiguous
boolean isAmbiguous()- Returns:
- True if the URI has any ambiguous
UriCompliance.Violation
s.
-
hasViolations
boolean hasViolations()- Returns:
- True if the URI has any
UriCompliance.Violation
s.
-
hasViolation
- Parameters:
violation
- the violation to check.- Returns:
- true if the URI has the passed violation.
-
getViolations
Collection<UriCompliance.Violation> getViolations()- Returns:
- Set of violations in the URI.
-
hasAmbiguousSegment
default boolean hasAmbiguousSegment()- Returns:
- True if the URI has a possibly ambiguous segment like '..;' or '%2e%2e'
-
hasAmbiguousEmptySegment
default boolean hasAmbiguousEmptySegment()- Returns:
- True if the URI empty segment that is ambiguous like '//' or '/;param/'.
-
hasAmbiguousSeparator
default boolean hasAmbiguousSeparator()- Returns:
- True if the URI has a possibly ambiguous separator of %2f
-
hasAmbiguousParameter
default boolean hasAmbiguousParameter()- Returns:
- True if the URI has a possibly ambiguous path parameter like '..;'
-
hasAmbiguousEncoding
default boolean hasAmbiguousEncoding()- Returns:
- True if the URI has an encoded '%' character.
-
hasUtf16Encoding
default boolean hasUtf16Encoding()- Returns:
- True if the URI has UTF16 '%u' encodings.
-
toURI
-