- java.lang.Object
-
- io.netty5.handler.codec.http.HttpUtil
-
public final class HttpUtil extends Object
Utility methods useful in the HTTP context.
-
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static String
formatHostnameForHttp(InetSocketAddress addr)
Formats the host string of an address so it can be used for computing an HTTP component such as a URL or a Host headerstatic Charset
getCharset(HttpMessage message)
Fetch charset from message's Content-Type header.static Charset
getCharset(HttpMessage message, Charset defaultCharset)
Fetch charset from message's Content-Type header.static Charset
getCharset(CharSequence contentTypeValue)
Fetch charset from Content-Type header value.static Charset
getCharset(CharSequence contentTypeValue, Charset defaultCharset)
Fetch charset from Content-Type header value.static CharSequence
getCharsetAsSequence(HttpMessage message)
Fetch charset from message's Content-Type header as a char sequence.static CharSequence
getCharsetAsSequence(CharSequence contentTypeValue)
Fetch charset from Content-Type header value as a char sequence.static CharSequence
getCharsetAsString(HttpMessage message)
Deprecated.static long
getContentLength(HttpMessage message)
Returns the length of the content.static int
getContentLength(HttpMessage message, int defaultValue)
Get anint
representation ofgetContentLength(HttpMessage, long)
.static long
getContentLength(HttpMessage message, long defaultValue)
Returns the length of the content or the specified default value if the message does not have the"Content-Length" header
.static CharSequence
getMimeType(HttpMessage message)
Fetch MIME type part from message's Content-Type header as a char sequence.static CharSequence
getMimeType(CharSequence contentTypeValue)
Fetch MIME type part from Content-Type header value as a char sequence.static boolean
is100ContinueExpected(HttpMessage message)
Returnstrue
if and only if the specified message contains an expect header and the only expectation present is the 100-continue expectation.static boolean
isAsteriskForm(String uri)
Determine if a string uri is in asterisk-form according to rfc7230, 5.3.static boolean
isAsteriskForm(URI uri)
Determine if a uri is in asterisk-form according to rfc7230, 5.3.static boolean
isContentLengthSet(HttpMessage m)
static boolean
isKeepAlive(HttpMessage message)
Returnstrue
if and only if the connection can remain open and thus 'kept alive'.static boolean
isOriginForm(String uri)
Determine if a string uri is in origin-form according to rfc7230, 5.3.static boolean
isOriginForm(URI uri)
Determine if a uri is in origin-form according to rfc7230, 5.3.static boolean
isTransferEncodingChunked(HttpMessage message)
Checks to see if the transfer encoding in a specifiedHttpMessage
is chunkedstatic long
normalizeAndGetContentLength(List<? extends CharSequence> contentLengthFields, boolean isHttp10OrEarlier, boolean allowDuplicateContentLengths)
Validates, and optionally extracts the content length from headers.static void
set100ContinueExpected(HttpMessage message, boolean expected)
Sets or removes the"Expect: 100-continue"
header to / from the specified message.static void
setContentLength(HttpMessage message, long length)
Sets the"Content-Length"
header.static void
setKeepAlive(HttpHeaders h, HttpVersion httpVersion, boolean keepAlive)
Sets the value of the"Connection"
header depending on the protocol version of the specified message.static void
setKeepAlive(HttpMessage message, boolean keepAlive)
Sets the value of the"Connection"
header depending on the protocol version of the specified message.static void
setTransferEncodingChunked(HttpMessage m, boolean chunked)
Set theHttpHeaderNames.TRANSFER_ENCODING
to either includeHttpHeaderValues.CHUNKED
ifchunked
istrue
, or removeHttpHeaderValues.CHUNKED
ifchunked
isfalse
.
-
-
-
Method Detail
-
isOriginForm
public static boolean isOriginForm(URI uri)
Determine if a uri is in origin-form according to rfc7230, 5.3.
-
isOriginForm
public static boolean isOriginForm(String uri)
Determine if a string uri is in origin-form according to rfc7230, 5.3.
-
isAsteriskForm
public static boolean isAsteriskForm(URI uri)
Determine if a uri is in asterisk-form according to rfc7230, 5.3.
-
isAsteriskForm
public static boolean isAsteriskForm(String uri)
Determine if a string uri is in asterisk-form according to rfc7230, 5.3.
-
isKeepAlive
public static boolean isKeepAlive(HttpMessage message)
Returnstrue
if and only if the connection can remain open and thus 'kept alive'. This methods respects the value of the."Connection"
header first and then the return value ofHttpVersion.isKeepAliveDefault()
.
-
setKeepAlive
public static void setKeepAlive(HttpMessage message, boolean keepAlive)
Sets the value of the"Connection"
header depending on the protocol version of the specified message. This getMethod sets or removes the"Connection"
header depending on what the default keep alive mode of the message's protocol version is, as specified byHttpVersion.isKeepAliveDefault()
.- If the connection is kept alive by default:
- set to
"close"
ifkeepAlive
isfalse
. - remove otherwise.
- set to
- If the connection is closed by default:
- set to
"keep-alive"
ifkeepAlive
istrue
. - remove otherwise.
- set to
- If the connection is kept alive by default:
-
setKeepAlive
public static void setKeepAlive(HttpHeaders h, HttpVersion httpVersion, boolean keepAlive)
Sets the value of the"Connection"
header depending on the protocol version of the specified message. This getMethod sets or removes the"Connection"
header depending on what the default keep alive mode of the message's protocol version is, as specified byHttpVersion.isKeepAliveDefault()
.- If the connection is kept alive by default:
- set to
"close"
ifkeepAlive
isfalse
. - remove otherwise.
- set to
- If the connection is closed by default:
- set to
"keep-alive"
ifkeepAlive
istrue
. - remove otherwise.
- set to
- If the connection is kept alive by default:
-
getContentLength
public static long getContentLength(HttpMessage message)
Returns the length of the content. Please note that this value is not retrieved fromHttpContent.payload()
but from the"Content-Length"
header, and thus they are independent from each other.- Returns:
- the content length
- Throws:
NumberFormatException
- if the message does not have the"Content-Length"
header or its value is not a number
-
getContentLength
public static long getContentLength(HttpMessage message, long defaultValue)
Returns the length of the content or the specified default value if the message does not have the"Content-Length" header
. Please note that this value is not retrieved fromHttpContent.payload()
but from the"Content-Length"
header, and thus they are independent from each other.- Parameters:
message
- the messagedefaultValue
- the default value- Returns:
- the content length or the specified default value
- Throws:
NumberFormatException
- if the"Content-Length"
header does not parse as a long
-
getContentLength
public static int getContentLength(HttpMessage message, int defaultValue)
Get anint
representation ofgetContentLength(HttpMessage, long)
.- Returns:
- the content length or
defaultValue
if this message does not have the"Content-Length"
header. - Throws:
NumberFormatException
- if the"Content-Length"
header does not parse as an int
-
setContentLength
public static void setContentLength(HttpMessage message, long length)
Sets the"Content-Length"
header.
-
isContentLengthSet
public static boolean isContentLengthSet(HttpMessage m)
-
is100ContinueExpected
public static boolean is100ContinueExpected(HttpMessage message)
Returnstrue
if and only if the specified message contains an expect header and the only expectation present is the 100-continue expectation. Note that this method returnsfalse
if the expect header is not valid for the message (e.g., the message is a response, or the version on the message is HTTP/1.0).- Parameters:
message
- the message- Returns:
true
if and only if the expectation 100-continue is present and it is the only expectation present
-
set100ContinueExpected
public static void set100ContinueExpected(HttpMessage message, boolean expected)
Sets or removes the"Expect: 100-continue"
header to / from the specified message. Ifexpected
istrue
, the"Expect: 100-continue"
header is set and all other previous"Expect"
headers are removed. Otherwise, all"Expect"
headers are removed completely.
-
isTransferEncodingChunked
public static boolean isTransferEncodingChunked(HttpMessage message)
Checks to see if the transfer encoding in a specifiedHttpMessage
is chunked- Parameters:
message
- The message to check- Returns:
- True if transfer encoding is chunked, otherwise false
-
setTransferEncodingChunked
public static void setTransferEncodingChunked(HttpMessage m, boolean chunked)
Set theHttpHeaderNames.TRANSFER_ENCODING
to either includeHttpHeaderValues.CHUNKED
ifchunked
istrue
, or removeHttpHeaderValues.CHUNKED
ifchunked
isfalse
.- Parameters:
m
- The message which contains the headers to modify.chunked
- iftrue
then includeHttpHeaderValues.CHUNKED
in the headers. otherwise removeHttpHeaderValues.CHUNKED
from the headers.
-
getCharset
public static Charset getCharset(HttpMessage message)
Fetch charset from message's Content-Type header.- Parameters:
message
- entity to fetch Content-Type header from- Returns:
- the charset from message's Content-Type header or
CharsetUtil.ISO_8859_1
if charset is not presented or unparsable
-
getCharset
public static Charset getCharset(CharSequence contentTypeValue)
Fetch charset from Content-Type header value.- Parameters:
contentTypeValue
- Content-Type header value to parse- Returns:
- the charset from message's Content-Type header or
CharsetUtil.ISO_8859_1
if charset is not presented or unparsable
-
getCharset
public static Charset getCharset(HttpMessage message, Charset defaultCharset)
Fetch charset from message's Content-Type header.- Parameters:
message
- entity to fetch Content-Type header fromdefaultCharset
- result to use in case of empty, incorrect or doesn't contain required part header value- Returns:
- the charset from message's Content-Type header or
defaultCharset
if charset is not presented or unparsable
-
getCharset
public static Charset getCharset(CharSequence contentTypeValue, Charset defaultCharset)
Fetch charset from Content-Type header value.- Parameters:
contentTypeValue
- Content-Type header value to parsedefaultCharset
- result to use in case of empty, incorrect or doesn't contain required part header value- Returns:
- the charset from message's Content-Type header or
defaultCharset
if charset is not presented or unparsable
-
getCharsetAsString
@Deprecated public static CharSequence getCharsetAsString(HttpMessage message)
Deprecated.Fetch charset from message's Content-Type header as a char sequence. A lot of sites/possibly clients have charset="CHARSET", for example charset="utf-8". Or "utf8" instead of "utf-8" This is not according to standard, but this method provide an ability to catch desired mistakes manually in code- Parameters:
message
- entity to fetch Content-Type header from- Returns:
- the
CharSequence
with charset from message's Content-Type header ornull
if charset is not presented
-
getCharsetAsSequence
public static CharSequence getCharsetAsSequence(HttpMessage message)
Fetch charset from message's Content-Type header as a char sequence. A lot of sites/possibly clients have charset="CHARSET", for example charset="utf-8". Or "utf8" instead of "utf-8" This is not according to standard, but this method provide an ability to catch desired mistakes manually in code- Returns:
- the
CharSequence
with charset from message's Content-Type header ornull
if charset is not presented
-
getCharsetAsSequence
public static CharSequence getCharsetAsSequence(CharSequence contentTypeValue)
Fetch charset from Content-Type header value as a char sequence. A lot of sites/possibly clients have charset="CHARSET", for example charset="utf-8". Or "utf8" instead of "utf-8" This is not according to standard, but this method provide an ability to catch desired mistakes manually in code- Parameters:
contentTypeValue
- Content-Type header value to parse- Returns:
- the
CharSequence
with charset from message's Content-Type header ornull
if charset is not presented - Throws:
NullPointerException
- in case ifcontentTypeValue == null
-
getMimeType
public static CharSequence getMimeType(HttpMessage message)
Fetch MIME type part from message's Content-Type header as a char sequence.- Parameters:
message
- entity to fetch Content-Type header from- Returns:
- the MIME type as a
CharSequence
from message's Content-Type header ornull
if content-type header or MIME type part of this header are not presented "content-type: text/html; charset=utf-8" - "text/html" will be returned
"content-type: text/html" - "text/html" will be returned
"content-type: " or no header -null
we be returned
-
getMimeType
public static CharSequence getMimeType(CharSequence contentTypeValue)
Fetch MIME type part from Content-Type header value as a char sequence.- Parameters:
contentTypeValue
- Content-Type header value to parse- Returns:
- the MIME type as a
CharSequence
from message's Content-Type header ornull
if content-type header or MIME type part of this header are not presented "content-type: text/html; charset=utf-8" - "text/html" will be returned
"content-type: text/html" - "text/html" will be returned
"content-type: empty header -null
we be returned - Throws:
NullPointerException
- in case ifcontentTypeValue == null
-
formatHostnameForHttp
public static String formatHostnameForHttp(InetSocketAddress addr)
Formats the host string of an address so it can be used for computing an HTTP component such as a URL or a Host header- Parameters:
addr
- the address- Returns:
- the formatted String
-
normalizeAndGetContentLength
@UnstableApi public static long normalizeAndGetContentLength(List<? extends CharSequence> contentLengthFields, boolean isHttp10OrEarlier, boolean allowDuplicateContentLengths)
Validates, and optionally extracts the content length from headers. This method is not intended for general use, but is here to be shared between HTTP/1 and HTTP/2 parsing.- Parameters:
contentLengthFields
- the content-length header fields.isHttp10OrEarlier
-true
if we are handling HTTP/1.0 or earlierallowDuplicateContentLengths
-true
if multiple, identical-value content lengths should be allowed.- Returns:
- the normalized content length from the headers or
-1
if the fields were empty. - Throws:
IllegalArgumentException
- if the content-length fields are not valid
-
-