Package org.eclipse.jetty.http
Class HttpURI
- java.lang.Object
-
- org.eclipse.jetty.http.HttpURI
-
public class HttpURI extends java.lang.Object
Http URI. Parse an HTTP URI from a string or byte array. Given a URIhttp://user@host:port/path/info;param?query#fragment
this class will split it into the following undecoded optional elements:getScheme()
- http:getAuthority()
- //name@host:portgetHost()
- hostgetPort()
- portgetPath()
- /path/infogetParam()
- paramgetQuery()
- querygetFragment()
- fragment
Any parameters will be returned from
getPath()
, but are excluded from the return value ofgetDecodedPath()
. If there are multiple parameters, thegetParam()
method returns only the last one.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
HttpURI.Ambiguous
private static class
HttpURI.State
-
Field Summary
Fields Modifier and Type Field Description private static Trie<java.lang.Boolean>
__ambiguousSegments
private java.util.EnumSet<HttpURI.Ambiguous>
_ambiguous
private java.lang.String
_decodedPath
private java.lang.String
_fragment
private java.lang.String
_host
private java.lang.String
_param
private java.lang.String
_path
private int
_port
private java.lang.String
_query
private java.lang.String
_scheme
private java.lang.String
_uri
private java.lang.String
_user
-
Constructor Summary
Constructors Constructor Description HttpURI()
HttpURI(java.lang.String uri)
HttpURI(java.lang.String scheme, java.lang.String host, int port, java.lang.String pathQuery)
HttpURI(java.lang.String scheme, java.lang.String host, int port, java.lang.String path, java.lang.String param, java.lang.String query, java.lang.String fragment)
HttpURI(java.net.URI uri)
HttpURI(HttpURI uri)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description private void
checkSegment(java.lang.String uri, int segment, int end, boolean param)
Check for ambiguous path segments.void
clear()
static HttpURI
createHttpURI(java.lang.String scheme, java.lang.String host, int port, java.lang.String path, java.lang.String param, java.lang.String query, java.lang.String fragment)
Construct a normalized URI.void
decodeQueryTo(MultiMap<java.lang.String> parameters)
void
decodeQueryTo(MultiMap<java.lang.String> parameters, java.lang.String encoding)
void
decodeQueryTo(MultiMap<java.lang.String> parameters, java.nio.charset.Charset encoding)
boolean
equals(java.lang.Object o)
java.lang.String
getAuthority()
java.lang.String
getDecodedPath()
java.lang.String
getFragment()
java.lang.String
getHost()
java.lang.String
getParam()
java.lang.String
getPath()
The parsed Path.java.lang.String
getPathQuery()
int
getPort()
java.lang.String
getQuery()
java.lang.String
getScheme()
java.lang.String
getUser()
boolean
hasAmbiguousParameter()
boolean
hasAmbiguousSegment()
boolean
hasAmbiguousSeparator()
int
hashCode()
boolean
hasQuery()
boolean
isAbsolute()
boolean
isAmbiguous()
void
parse(java.lang.String uri)
void
parse(java.lang.String uri, int offset, int length)
private void
parse(HttpURI.State state, java.lang.String uri, int offset, int end)
void
parseConnect(java.lang.String uri)
Deprecated.void
parseRequestTarget(java.lang.String method, java.lang.String uri)
Parse according to https://tools.ietf.org/html/rfc7230#section-5.3void
setAuthority(java.lang.String host, int port)
void
setParam(java.lang.String param)
void
setPath(java.lang.String path)
void
setPathQuery(java.lang.String pathQuery)
void
setQuery(java.lang.String query)
void
setScheme(java.lang.String scheme)
java.lang.String
toString()
java.net.URI
toURI()
-
-
-
Field Detail
-
__ambiguousSegments
private static final Trie<java.lang.Boolean> __ambiguousSegments
The concept of URI path parameters was originally specified in RFC2396, but that was obsoleted by RFC3986 which removed a normative definition of path parameters. Specifically it excluded them from the Remove Dot Segments algorithm. This results in some ambiguity as dot segments can result from later parameter removal or % encoding expansion, that are not removed from the URI byURIUtil.canonicalPath(String)
. Thus this class flags such ambiguous path segments, so that they may be rejected by the server if so configured.
-
_scheme
private java.lang.String _scheme
-
_user
private java.lang.String _user
-
_host
private java.lang.String _host
-
_port
private int _port
-
_path
private java.lang.String _path
-
_param
private java.lang.String _param
-
_query
private java.lang.String _query
-
_fragment
private java.lang.String _fragment
-
_uri
private java.lang.String _uri
-
_decodedPath
private java.lang.String _decodedPath
-
_ambiguous
private final java.util.EnumSet<HttpURI.Ambiguous> _ambiguous
-
-
Constructor Detail
-
HttpURI
public HttpURI()
-
HttpURI
public HttpURI(java.lang.String scheme, java.lang.String host, int port, java.lang.String path, java.lang.String param, java.lang.String query, java.lang.String fragment)
-
HttpURI
public HttpURI(HttpURI uri)
-
HttpURI
public HttpURI(java.lang.String uri)
-
HttpURI
public HttpURI(java.net.URI uri)
-
HttpURI
public HttpURI(java.lang.String scheme, java.lang.String host, int port, java.lang.String pathQuery)
-
-
Method Detail
-
createHttpURI
public static HttpURI createHttpURI(java.lang.String scheme, java.lang.String host, int port, java.lang.String path, java.lang.String param, java.lang.String query, java.lang.String fragment)
Construct a normalized URI. Port is not set if it is the default port.- Parameters:
scheme
- the URI schemehost
- the URI hoseport
- the URI portpath
- the URI pathparam
- the URI paramquery
- the URI queryfragment
- the URI fragment- Returns:
- the normalized URI
-
clear
public void clear()
-
parse
public void parse(java.lang.String uri)
-
parseRequestTarget
public void parseRequestTarget(java.lang.String method, java.lang.String uri)
Parse according to https://tools.ietf.org/html/rfc7230#section-5.3- Parameters:
method
- the request methoduri
- the request uri
-
parseConnect
@Deprecated public void parseConnect(java.lang.String uri)
Deprecated.
-
parse
public void parse(java.lang.String uri, int offset, int length)
-
parse
private void parse(HttpURI.State state, java.lang.String uri, int offset, int end)
-
checkSegment
private void checkSegment(java.lang.String uri, int segment, int end, boolean param)
Check for ambiguous path segments. An ambiguous path segment is one that is perhaps technically legal, but is considered undesirable to handle due to possible ambiguity. Examples include segments like '..;', '%2e', '%2e%2e' etc.- Parameters:
uri
- The URI stringsegment
- The inclusive starting index of the segment (excluding any '/')end
- The exclusive end index of the segment
-
hasAmbiguousSegment
public boolean hasAmbiguousSegment()
- Returns:
- True if the URI has a possibly ambiguous segment like '..;' or '%2e%2e'
-
hasAmbiguousSeparator
public boolean hasAmbiguousSeparator()
- Returns:
- True if the URI has a possibly ambiguous separator of %2f
-
hasAmbiguousParameter
public boolean hasAmbiguousParameter()
- Returns:
- True if the URI has a possibly ambiguous path parameter like '..;'
-
isAmbiguous
public boolean isAmbiguous()
- Returns:
- True if the URI has either an
hasAmbiguousSegment()
orhasAmbiguousSeparator()
.
-
getScheme
public java.lang.String getScheme()
-
getHost
public java.lang.String getHost()
-
getPort
public int getPort()
-
getPath
public java.lang.String getPath()
The parsed Path.- Returns:
- the path as parsed on valid URI. null for invalid URI.
-
getDecodedPath
public java.lang.String getDecodedPath()
- Returns:
- The decoded canonical path.
- See Also:
URIUtil.canonicalPath(String)
-
getParam
public java.lang.String getParam()
-
setParam
public void setParam(java.lang.String param)
-
getQuery
public java.lang.String getQuery()
-
hasQuery
public boolean hasQuery()
-
getFragment
public java.lang.String getFragment()
-
decodeQueryTo
public void decodeQueryTo(MultiMap<java.lang.String> parameters)
-
decodeQueryTo
public void decodeQueryTo(MultiMap<java.lang.String> parameters, java.lang.String encoding) throws java.io.UnsupportedEncodingException
- Throws:
java.io.UnsupportedEncodingException
-
decodeQueryTo
public void decodeQueryTo(MultiMap<java.lang.String> parameters, java.nio.charset.Charset encoding) throws java.io.UnsupportedEncodingException
- Throws:
java.io.UnsupportedEncodingException
-
isAbsolute
public boolean isAbsolute()
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
setScheme
public void setScheme(java.lang.String scheme)
-
setAuthority
public void setAuthority(java.lang.String host, int port)
- Parameters:
host
- the hostport
- the port
-
setPath
public void setPath(java.lang.String path)
- Parameters:
path
- the path
-
setPathQuery
public void setPathQuery(java.lang.String pathQuery)
-
setQuery
public void setQuery(java.lang.String query)
-
toURI
public java.net.URI toURI() throws java.net.URISyntaxException
- Throws:
java.net.URISyntaxException
-
getPathQuery
public java.lang.String getPathQuery()
-
getAuthority
public java.lang.String getAuthority()
-
getUser
public java.lang.String getUser()
-
-