# Class HttpParser

java.lang.Object
org.apache.tomcat.util.http.parser.HttpParser

public class HttpParser extends Object
HTTP header value parser implementation. Parsing HTTP headers as per RFC2616 is not always as simple as it first appears. For headers that only use tokens the simple approach will normally be sufficient. However, for the other headers, while simple code meets 99.9% of cases, there are often some edge cases that make things far more complicated. The purpose of this parser is to let the parser worry about the edge cases. It provides tolerant (where safe to do so) parsing of HTTP header values assuming that wrapped header lines have already been unwrapped. (The Tomcat header processing code does the unwrapping.)

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `HttpParser(String relaxedPathChars, String relaxedQueryChars)`
  Creates a new HTTP parser with optional relaxed character sets for path and query.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static boolean`
  `isAbsolutePath(int c)`
  Checks if the given character is valid for an absolute path as per RFC 3986.
  `boolean`
  `isAbsolutePathRelaxed(int c)`
  Checks if the given character is valid for a relaxed absolute path.
  `static boolean`
  `isAlpha(int c)`
  Checks if the given character is an alphabetic character.
  `static boolean`
  `isControl(int c)`
  Checks if the given character is a control character.
  `static boolean`
  `isFieldContent(int c)`
  Checks if the given character is valid field-content as per RFC 7230.
  `static boolean`
  `isFieldVChar(int c)`
  Checks if the given character is a valid field-vchar as per RFC 7230.
  `static boolean`
  `isHex(int c)`
  Checks if the given character is a valid hexadecimal digit.
  `static boolean`
  `isHttpProtocol(int c)`
  Checks if the given character is valid for an HTTP protocol version string.
  `static boolean`
  `isNotRequestTarget(int c)`
  Checks if the given character is not valid for a request target.
  `boolean`
  `isNotRequestTargetRelaxed(int c)`
  Checks if the given character is not valid for a relaxed request target.
  `static boolean`
  `isNumeric(int c)`
  Checks if the given character is a numeric digit.
  `static boolean`
  `isQuery(int c)`
  Checks if the given character is valid for a query string as per RFC 3986.
  `boolean`
  `isQueryRelaxed(int c)`
  Checks if the given character is valid for a relaxed query string.
  `static boolean`
  `isScheme(int c)`
  Checks if the given character is valid for a URI scheme as per RFC 3986.
  `static boolean`
  `isScheme(String s)`
  Is the provided String a scheme as per RFC 3986?
  `static boolean`
  `isToken(int c)`
  Checks if the given character is a valid HTTP token character as per RFC 7230.
  `static boolean`
  `isToken(String s)`
  Is the provided String a token as per RFC 7230?
  `static boolean`
  `isUserInfo(int c)`
  Checks if the given character is valid for a URI userinfo component as per RFC 3986.
  `static boolean`
  `isWhiteSpace(int c)`
  Checks if the given character is whitespace (tab or space).
  `static String`
  `unquote(String input)`
  Removes surrounding quotes from a string, handling escaped characters.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### HttpParser

    public HttpParser(String relaxedPathChars, String relaxedQueryChars)
    Creates a new HTTP parser with optional relaxed character sets for path and query.
    Parameters:
      `relaxedPathChars` - Additional characters to allow in the path, or `null`
      `relaxedQueryChars` - Additional characters to allow in the query, or `null`

- ## Method Details

  - ### isNotRequestTargetRelaxed

    public boolean isNotRequestTargetRelaxed(int c)
    Checks if the given character is not valid for a relaxed request target.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is not valid for a request target

  - ### isAbsolutePathRelaxed

    public boolean isAbsolutePathRelaxed(int c)
    Checks if the given character is valid for a relaxed absolute path.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for an absolute path

  - ### isQueryRelaxed

    public boolean isQueryRelaxed(int c)
    Checks if the given character is valid for a relaxed query string.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for a query string

  - ### unquote

    public static String unquote(String input)
    Removes surrounding quotes from a string, handling escaped characters.
    Parameters:
      `input` - the string to unquote
    Returns:
      the unquoted string, or `null` if the input is invalid

  - ### isToken

    public static boolean isToken(int c)
    Checks if the given character is a valid HTTP token character as per RFC 7230.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is a valid token character

  - ### isToken

    public static boolean isToken(String s)
    Is the provided String a token as per RFC 7230?
    Note: token = 1 * tchar (RFC 7230)
    Since a token requires at least 1 tchar, `null` and the empty string (`""`) are not considered to be valid tokens.
    Parameters:
      `s` - The string to test
    Returns:
      `true` if the string is a valid token, otherwise `false`

  - ### isHex

    public static boolean isHex(int c)
    Checks if the given character is a valid hexadecimal digit.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is a valid hex digit

  - ### isNotRequestTarget

    public static boolean isNotRequestTarget(int c)
    Checks if the given character is not valid for a request target.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is not valid for a request target

  - ### isHttpProtocol

    public static boolean isHttpProtocol(int c)
    Checks if the given character is valid for an HTTP protocol version string.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for an HTTP protocol version

  - ### isAlpha

    public static boolean isAlpha(int c)
    Checks if the given character is an alphabetic character.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is alphabetic

  - ### isNumeric

    public static boolean isNumeric(int c)
    Checks if the given character is a numeric digit.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is a numeric digit

  - ### isScheme

    public static boolean isScheme(int c)
    Checks if the given character is valid for a URI scheme as per RFC 3986.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for a URI scheme

  - ### isScheme

    public static boolean isScheme(String s)
    Is the provided String a scheme as per RFC 3986?
    Note: scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
    Since a scheme requires at least 1 ALPHA, `null` and the empty string (`""`) are not considered to be valid tokens.
    Parameters:
      `s` - The string to test
    Returns:
      `true` if the string is a valid scheme, otherwise `false`

  - ### isUserInfo

    public static boolean isUserInfo(int c)
    Checks if the given character is valid for a URI userinfo component as per RFC 3986.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for userinfo

  - ### isWhiteSpace

    public static boolean isWhiteSpace(int c)
    Checks if the given character is whitespace (tab or space).
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is whitespace

  - ### isAbsolutePath

    public static boolean isAbsolutePath(int c)
    Checks if the given character is valid for an absolute path as per RFC 3986.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for an absolute path

  - ### isQuery

    public static boolean isQuery(int c)
    Checks if the given character is valid for a query string as per RFC 3986.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid for a query string

  - ### isControl

    public static boolean isControl(int c)
    Checks if the given character is a control character.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is a control character

  - ### isFieldVChar

    public static boolean isFieldVChar(int c)
    Checks if the given character is a valid field-vchar as per RFC 7230.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid field-vchar

  - ### isFieldContent

    public static boolean isFieldContent(int c)
    Checks if the given character is valid field-content as per RFC 7230.
    Parameters:
      `c` - the character to check
    Returns:
      `true` if the character is valid field-content