Class BasicHttpResponseDecoder

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.handler.codec.ByteToMessageDecoder
io.netty.handler.codec.http.HttpObjectDecoder
com.linkedin.alpini.netty4.handlers.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
    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

    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
     
    protected io.netty.handler.codec.http.HttpMessage
    createMessage(String[] initialLine)
     
    protected boolean
     
    protected abstract io.netty.handler.codec.http.HttpRequest
     

    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 Details

    • 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 Details

    • createMessage

      protected io.netty.handler.codec.http.HttpMessage createMessage(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)