Class HttpUtil

java.lang.Object
io.netty.handler.codec.http.HttpUtil

public final class HttpUtil extends Object
Utility methods useful in the HTTP context.
  • Field Details

    • CHARSET_EQUALS

      private static final AsciiString CHARSET_EQUALS
    • SEMICOLON

      private static final AsciiString SEMICOLON
    • COMMA_STRING

      private static final String COMMA_STRING
  • Constructor Details

    • HttpUtil

      private HttpUtil()
  • Method Details

    • 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)
      Returns true 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 of HttpVersion.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 by HttpVersion.isKeepAliveDefault().
      • If the connection is kept alive by default:
        • set to "close" if keepAlive is false.
        • remove otherwise.
      • If the connection is closed by default:
        • set to "keep-alive" if keepAlive is true.
        • remove otherwise.
      See Also:
    • 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 by HttpVersion.isKeepAliveDefault().
      • If the connection is kept alive by default:
        • set to "close" if keepAlive is false.
        • remove otherwise.
      • If the connection is closed by default:
        • set to "keep-alive" if keepAlive is true.
        • remove otherwise.
    • getContentLength

      public static long getContentLength(HttpMessage message)
      Returns the length of the content. Please note that this value is not retrieved from ByteBufHolder.content() 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 from ByteBufHolder.content() but from the "Content-Length" header, and thus they are independent from each other.
      Parameters:
      message - the message
      defaultValue - 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 an int representation of getContentLength(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
    • getWebSocketContentLength

      static int getWebSocketContentLength(HttpMessage message)
      Returns the content length of the specified web socket message. If the specified message is not a web socket message, -1 is returned.
    • 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)
      Returns true 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 returns false 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
    • isUnsupportedExpectation

      static boolean isUnsupportedExpectation(HttpMessage message)
      Returns true if the specified message contains an expect header specifying an expectation that is not supported. Note that this method returns false 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 an expectation is present that is not supported
    • isExpectHeaderValid

      private static boolean isExpectHeaderValid(HttpMessage message)
    • set100ContinueExpected

      public static void set100ContinueExpected(HttpMessage message, boolean expected)
      Sets or removes the "Expect: 100-continue" header to / from the specified message. If expected is true, 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 specified HttpMessage 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 the HttpHeaderNames.TRANSFER_ENCODING to either include HttpHeaderValues.CHUNKED if chunked is true, or remove HttpHeaderValues.CHUNKED if chunked is false.
      Parameters:
      m - The message which contains the headers to modify.
      chunked - if true then include HttpHeaderValues.CHUNKED in the headers. otherwise remove HttpHeaderValues.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 from
      defaultCharset - 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 parse
      defaultCharset - 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)
      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 or null 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 or null 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 or null if charset is not presented
      Throws:
      NullPointerException - in case if contentTypeValue == 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 or null 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 or null 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 if contentTypeValue == 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 earlier
      allowDuplicateContentLengths - 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