Class BasicHttpResponseDecoder

  • All Implemented Interfaces:
    io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler

    public abstract class BasicHttpResponseDecoder
    extends io.netty.handler.codec.http.HttpObjectDecoder
    Decodes ByteBufs into HttpResponses and HttpContents.

    Parameters that prevents excessive memory consumption

    NameMeaning
    maxInitialLineLength The maximum length of the initial line (e.g. "HTTP/1.0 200 OK") If the length of the initial line exceeds this value, a TooLongFrameException will be raised.
    maxHeaderSize The maximum length of all headers. If the sum of the length of each header exceeds this value, a TooLongFrameException will be raised.
    maxChunkSize The maximum length of the content or each chunk. If the content length exceeds this value, the transfer encoding of the decoded response will be converted to 'chunked' and the content will be split into multiple HttpContents. If the transfer encoding of the HTTP response is 'chunked' already, each chunk will be split into smaller chunks if the length of the chunk exceeds this value. If you prefer not to handle HttpContents in your handler, insert HttpObjectAggregator after this decoder in the ChannelPipeline.

    Decoding a response for a HEAD request

    Unlike other HTTP requests, the successful response of a HEAD request does not have any content even if there is Content-Length header. Because BasicHttpResponseDecoder is not able to determine if the response currently being decoded is associated with a HEAD request, you must override HttpObjectDecoder.isContentAlwaysEmpty(HttpMessage) to return true for the response of the HEAD request.

    If you are writing an HTTP client that issues a HEAD request, please use BasicHttpClientCodec instead of this decoder. It will perform additional state management to handle the responses for HEAD requests correctly.

    Decoding a response for a CONNECT request

    You also need to do additional state management to handle the response of a CONNECT request properly, like you did for HEAD. One difference is that the decoder should stop decoding completely after decoding the successful 200 response since the connection is not an HTTP connection anymore.

    BasicHttpClientCodec also handles this edge case correctly, so you have to use BasicHttpClientCodec if you are writing an HTTP client that issues a CONNECT request.

    • Nested Class Summary

      • Nested classes/interfaces inherited from class io.netty.handler.codec.ByteToMessageDecoder

        io.netty.handler.codec.ByteToMessageDecoder.Cumulator
      • Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler

        io.netty.channel.ChannelHandler.Sharable
    • Field Summary

      • Fields inherited from class io.netty.handler.codec.http.HttpObjectDecoder

        DEFAULT_ALLOW_DUPLICATE_CONTENT_LENGTHS, DEFAULT_CHUNKED_SUPPORTED, DEFAULT_INITIAL_BUFFER_SIZE, DEFAULT_MAX_CHUNK_SIZE, DEFAULT_MAX_HEADER_SIZE, DEFAULT_MAX_INITIAL_LINE_LENGTH, DEFAULT_VALIDATE_HEADERS, validateHeaders
      • Fields inherited from class io.netty.handler.codec.ByteToMessageDecoder

        COMPOSITE_CUMULATOR, MERGE_CUMULATOR
    • Constructor Summary

      Constructors 
      Constructor Description
      BasicHttpResponseDecoder()
      Creates a new instance with the default maxInitialLineLength (4096), maxHeaderSize (8192), and maxChunkSize (8192).
      BasicHttpResponseDecoder​(int maxInitialLineLength, int maxHeaderSize, int maxChunkSize)
      Creates a new instance with the specified parameters.
      BasicHttpResponseDecoder​(int maxInitialLineLength, int maxHeaderSize, int maxChunkSize, boolean validateHeaders)  
      BasicHttpResponseDecoder​(int maxInitialLineLength, int maxHeaderSize, int maxChunkSize, boolean validateHeaders, int initialBufferSize)  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected abstract io.netty.handler.codec.http.HttpResponse checkLastResponse​(io.netty.handler.codec.http.HttpResponse response)  
      protected io.netty.handler.codec.http.HttpMessage createInvalidMessage()  
      protected io.netty.handler.codec.http.HttpMessage createMessage​(java.lang.String[] initialLine)  
      protected boolean isDecodingRequest()  
      protected abstract io.netty.handler.codec.http.HttpRequest lastRequest()  
      • Methods inherited from class io.netty.handler.codec.http.HttpObjectDecoder

        decode, decodeLast, handleTransferEncodingChunkedWithContentLength, isContentAlwaysEmpty, isSwitchingToNonHttp1Protocol, reset, userEventTriggered
      • Methods inherited from class io.netty.handler.codec.ByteToMessageDecoder

        actualReadableBytes, callDecode, channelInactive, channelRead, channelReadComplete, discardSomeReadBytes, handlerRemoved, handlerRemoved0, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode
      • Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter

        channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught
      • Methods inherited from class io.netty.channel.ChannelHandlerAdapter

        ensureNotSharable, handlerAdded, isSharable
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface io.netty.channel.ChannelHandler

        handlerAdded
    • Constructor Detail

      • BasicHttpResponseDecoder

        public BasicHttpResponseDecoder()
        Creates a new instance with the default maxInitialLineLength (4096), maxHeaderSize (8192), and maxChunkSize (8192).
      • BasicHttpResponseDecoder

        public BasicHttpResponseDecoder​(int maxInitialLineLength,
                                        int maxHeaderSize,
                                        int maxChunkSize)
        Creates a new instance with the specified parameters.
      • BasicHttpResponseDecoder

        public BasicHttpResponseDecoder​(int maxInitialLineLength,
                                        int maxHeaderSize,
                                        int maxChunkSize,
                                        boolean validateHeaders)
      • BasicHttpResponseDecoder

        public BasicHttpResponseDecoder​(int maxInitialLineLength,
                                        int maxHeaderSize,
                                        int maxChunkSize,
                                        boolean validateHeaders,
                                        int initialBufferSize)
    • Method Detail

      • createMessage

        protected io.netty.handler.codec.http.HttpMessage createMessage​(java.lang.String[] initialLine)
        Specified by:
        createMessage in class io.netty.handler.codec.http.HttpObjectDecoder
      • createInvalidMessage

        protected io.netty.handler.codec.http.HttpMessage createInvalidMessage()
        Specified by:
        createInvalidMessage in class io.netty.handler.codec.http.HttpObjectDecoder
      • isDecodingRequest

        protected boolean isDecodingRequest()
        Specified by:
        isDecodingRequest in class io.netty.handler.codec.http.HttpObjectDecoder
      • lastRequest

        protected abstract io.netty.handler.codec.http.HttpRequest lastRequest()
      • checkLastResponse

        protected abstract io.netty.handler.codec.http.HttpResponse checkLastResponse​(io.netty.handler.codec.http.HttpResponse response)