Class HttpConversionUtil

java.lang.Object
io.netty.handler.codec.http2.HttpConversionUtil

public final class HttpConversionUtil extends Object
Provides utility methods and constants for the HTTP/2 to HTTP conversion
  • Field Details

    • HTTP_TO_HTTP2_HEADER_BLACKLIST

      private static final CharSequenceMap<AsciiString> HTTP_TO_HTTP2_HEADER_BLACKLIST
      The set of headers that should not be directly copied when converting headers from HTTP to HTTP/2.
    • OUT_OF_MESSAGE_SEQUENCE_METHOD

      public static final HttpMethod OUT_OF_MESSAGE_SEQUENCE_METHOD
      This will be the method used for HttpRequest objects generated out of the HTTP message flow defined in [RFC 7540], Section 8.1
    • OUT_OF_MESSAGE_SEQUENCE_PATH

      public static final String OUT_OF_MESSAGE_SEQUENCE_PATH
      This will be the path used for HttpRequest objects generated out of the HTTP message flow defined in [RFC 7540], Section 8.1
      See Also:
    • OUT_OF_MESSAGE_SEQUENCE_RETURN_CODE

      public static final HttpResponseStatus OUT_OF_MESSAGE_SEQUENCE_RETURN_CODE
      This will be the status code used for HttpResponse objects generated out of the HTTP message flow defined in [RFC 7540], Section 8.1
    • EMPTY_REQUEST_PATH

      private static final AsciiString EMPTY_REQUEST_PATH
      [RFC 7540], 8.1.2.3 states the path must not be empty, and instead should be /.
  • Constructor Details

    • HttpConversionUtil

      private HttpConversionUtil()
  • Method Details

    • parseStatus

      public static HttpResponseStatus parseStatus(CharSequence status) throws Http2Exception
      Apply HTTP/2 rules while translating status code to HttpResponseStatus
      Parameters:
      status - The status from an HTTP/2 frame
      Returns:
      The HTTP/1.x status
      Throws:
      Http2Exception - If there is a problem translating from HTTP/2 to HTTP/1.x
    • toFullHttpResponse

      public static FullHttpResponse toFullHttpResponse(int streamId, Http2Headers http2Headers, ByteBufAllocator alloc, boolean validateHttpHeaders) throws Http2Exception
      Create a new object to contain the response data
      Parameters:
      streamId - The stream associated with the response
      http2Headers - The initial set of HTTP/2 headers to create the response with
      alloc - The ByteBufAllocator to use to generate the content of the message
      validateHttpHeaders -
      • true to validate HTTP headers in the http-codec
      • false not to validate HTTP headers in the http-codec
      Returns:
      A new response object which represents headers/data
      Throws:
      Http2Exception - see addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)
    • toFullHttpResponse

      public static FullHttpResponse toFullHttpResponse(int streamId, Http2Headers http2Headers, ByteBuf content, boolean validateHttpHeaders) throws Http2Exception
      Create a new object to contain the response data
      Parameters:
      streamId - The stream associated with the response
      http2Headers - The initial set of HTTP/2 headers to create the response with
      content - ByteBuf content to put in FullHttpResponse
      validateHttpHeaders -
      • true to validate HTTP headers in the http-codec
      • false not to validate HTTP headers in the http-codec
      Returns:
      A new response object which represents headers/data
      Throws:
      Http2Exception - see addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)
    • toFullHttpRequest

      public static FullHttpRequest toFullHttpRequest(int streamId, Http2Headers http2Headers, ByteBufAllocator alloc, boolean validateHttpHeaders) throws Http2Exception
      Create a new object to contain the request data
      Parameters:
      streamId - The stream associated with the request
      http2Headers - The initial set of HTTP/2 headers to create the request with
      alloc - The ByteBufAllocator to use to generate the content of the message
      validateHttpHeaders -
      • true to validate HTTP headers in the http-codec
      • false not to validate HTTP headers in the http-codec
      Returns:
      A new request object which represents headers/data
      Throws:
      Http2Exception - see addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)
    • extractPath

      private static String extractPath(CharSequence method, Http2Headers headers)
    • toFullHttpRequest

      public static FullHttpRequest toFullHttpRequest(int streamId, Http2Headers http2Headers, ByteBuf content, boolean validateHttpHeaders) throws Http2Exception
      Create a new object to contain the request data
      Parameters:
      streamId - The stream associated with the request
      http2Headers - The initial set of HTTP/2 headers to create the request with
      content - ByteBuf content to put in FullHttpRequest
      validateHttpHeaders -
      • true to validate HTTP headers in the http-codec
      • false not to validate HTTP headers in the http-codec
      Returns:
      A new request object which represents headers/data
      Throws:
      Http2Exception - see addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)
    • toHttpRequest

      public static HttpRequest toHttpRequest(int streamId, Http2Headers http2Headers, boolean validateHttpHeaders) throws Http2Exception
      Create a new object to contain the request data.
      Parameters:
      streamId - The stream associated with the request
      http2Headers - The initial set of HTTP/2 headers to create the request with
      validateHttpHeaders -
      • true to validate HTTP headers in the http-codec
      • false not to validate HTTP headers in the http-codec
      Returns:
      A new request object which represents headers for a chunked request
      Throws:
      Http2Exception - see addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)
    • toHttpResponse

      public static HttpResponse toHttpResponse(int streamId, Http2Headers http2Headers, boolean validateHttpHeaders) throws Http2Exception
      Create a new object to contain the response data.
      Parameters:
      streamId - The stream associated with the response
      http2Headers - The initial set of HTTP/2 headers to create the response with
      validateHttpHeaders -
      • true to validate HTTP headers in the http-codec
      • false not to validate HTTP headers in the http-codec
      Returns:
      A new response object which represents headers for a chunked response
      Throws:
      Http2Exception - see addHttp2ToHttpHeaders(int, Http2Headers, HttpHeaders, HttpVersion, boolean, boolean)
    • addHttp2ToHttpHeaders

      public static void addHttp2ToHttpHeaders(int streamId, Http2Headers inputHeaders, FullHttpMessage destinationMessage, boolean addToTrailer) throws Http2Exception
      Translate and add HTTP/2 headers to HTTP/1.x headers.
      Parameters:
      streamId - The stream associated with sourceHeaders.
      inputHeaders - The HTTP/2 headers to convert.
      destinationMessage - The object which will contain the resulting HTTP/1.x headers.
      addToTrailer - true to add to trailing headers. false to add to initial headers.
      Throws:
      Http2Exception - If not all HTTP/2 headers can be translated to HTTP/1.x.
      See Also:
    • addHttp2ToHttpHeaders

      public static void addHttp2ToHttpHeaders(int streamId, Http2Headers inputHeaders, HttpHeaders outputHeaders, HttpVersion httpVersion, boolean isTrailer, boolean isRequest) throws Http2Exception
      Translate and add HTTP/2 headers to HTTP/1.x headers.
      Parameters:
      streamId - The stream associated with sourceHeaders.
      inputHeaders - The HTTP/2 headers to convert.
      outputHeaders - The object which will contain the resulting HTTP/1.x headers..
      httpVersion - What HTTP/1.x version outputHeaders should be treated as when doing the conversion.
      isTrailer - true if outputHeaders should be treated as trailing headers. false otherwise.
      isRequest - true if the outputHeaders will be used in a request message. false for response message.
      Throws:
      Http2Exception - If not all HTTP/2 headers can be translated to HTTP/1.x.
    • toHttp2Headers

      public static Http2Headers toHttp2Headers(HttpMessage in, boolean validateHeaders)
      Converts the given HTTP/1.x headers into HTTP/2 headers. The following headers are only used if they can not be found in from the HOST header or the Request-Line as defined by rfc7230 HttpConversionUtil.ExtensionHeaderNames.PATH is ignored and instead extracted from the Request-Line.
    • toHttp2Headers

      public static Http2Headers toHttp2Headers(HttpHeaders inHeaders, boolean validateHeaders)
    • toLowercaseMap

      private static CharSequenceMap<AsciiString> toLowercaseMap(Iterator<? extends CharSequence> valuesIter, int arraySizeHint)
    • toHttp2HeadersFilterTE

      private static void toHttp2HeadersFilterTE(Map.Entry<CharSequence, CharSequence> entry, Http2Headers out)
      Filter the HttpHeaderNames.TE header according to the special rules in the HTTP/2 RFC.
      Parameters:
      entry - An entry whose name is HttpHeaderNames.TE.
      out - the resulting HTTP/2 headers.
    • toHttp2Headers

      public static void toHttp2Headers(HttpHeaders inHeaders, Http2Headers out)
    • splitValidCookieHeader

      private static void splitValidCookieHeader(Http2Headers out, CharSequence valueCs)
    • toHttp2Path

      private static AsciiString toHttp2Path(String uri)
      Generate an HTTP/2 {code :path} from a request-target in accordance with rfc7230, 5.3.
    • parsePath

      private static String parsePath(String uri)
      Extract the path out of the request-target. Based on Vert.x' HttpUtils.parsePath logic.
    • parseQuery

      private static String parseQuery(String uri)
      Extract the query out of a request-target or returns null if no query was found.
    • dropEmptyFragment

      private static String dropEmptyFragment(String path)
    • appendQuery

      private static void appendQuery(StringBuilder pathBuilder, String query)
    • queryOrFragmentStart

      static int queryOrFragmentStart(String uri, int searchStart)
    • hasSchemeAndAuthority

      static boolean hasSchemeAndAuthority(String requestTarget)
    • schemeEnd

      private static int schemeEnd(String requestTarget)
    • http2PathlessRequestTarget

      private static String http2PathlessRequestTarget(String requestTarget)
    • isValidScheme

      static boolean isValidScheme(String uri, int schemeEnd)
    • isAlpha

      private static boolean isAlpha(char c)
    • setHttp2Authority

      static void setHttp2Authority(String authority, Http2Headers out)
    • setHttp2Scheme

      private static void setHttp2Scheme(HttpHeaders in, Http2Headers out)
    • setHttp2Scheme

      private static void setHttp2Scheme(HttpHeaders in, URI uri, Http2Headers out)
    • setHttp2Scheme

      private static void setHttp2Scheme(HttpHeaders in, String scheme, int port, Http2Headers out)