Buffers into HttpMessages and
HttpContents.
| Name | Default value | Meaning |
|---|---|---|
maxInitialLineLength |
4096 | The maximum length of the initial line
(e.g. "GET / HTTP/1.0" or "HTTP/1.0 200 OK")
If the length of the initial line exceeds this value, a
TooLongHttpLineException will be raised. |
maxHeaderSize |
8192 | The maximum length of all headers. If the sum of the length of each
header exceeds this value, a TooLongHttpHeaderException will be raised. |
| Name | Default value | Meaning |
|---|---|---|
allowDuplicateContentLengths |
false | When set to false, will reject any messages that contain multiple Content-Length header fields.
When set to true, will allow multiple Content-Length headers only if they are all the same decimal value.
The duplicated field-values will be replaced with a single valid Content-Length field.
See RFC 7230, Section 3.3.2. |
maxChunkSize or
the transfer encoding of the HTTP message is 'chunked', this decoder
generates one HttpMessage instance and its following
HttpContents per single HTTP message to avoid excessive memory
consumption. For example, the following HTTP message:
GET / HTTP/1.1 Transfer-Encoding: chunked 1a abcdefghijklmnopqrstuvwxyz 10 1234567890abcdef 0 Content-MD5: ... [blank line]triggers
HttpRequestDecoder to generate 3 objects:
HttpRequest,HttpContent whose content is 'abcdefghijklmnopqrstuvwxyz',LastHttpContent whose content is '1234567890abcdef', which marks
the end of the content.HttpContents by yourself for your
convenience, insert HttpObjectAggregator after this decoder in the
ChannelPipeline. However, please note that your server might not
be as memory efficient as without the aggregator.
| Modifier and Type | Class and Description |
|---|---|
| private static class | |
| private class | |
| private static enum | HttpObjectDecoder.State
The internal state of |
| Modifier and Type | Field and Description |
|---|---|
| private final boolean | |
| private final boolean | |
| private long | |
| private long | |
| private HttpObjectDecoder. | |
| public static final boolean | |
| public static final boolean | |
| public static final int | |
| public static final int | |
| public static final int | |
| public static final boolean | |
| private static final String | |
| private final HttpObjectDecoder. | |
| private final HttpObjectDecoder. | |
| private HttpMessage | |
| private CharSequence | |
| private volatile boolean | |
| private LastHttpContent | |
| protected final boolean | |
| private CharSequence |
| Access | Constructor and Description |
|---|---|
| protected | HttpObjectDecoder()
Creates a new instance with the default
|
| protected | HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported)
Creates a new instance with the specified parameters. |
| protected | HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported, boolean validateHeaders)
Creates a new instance with the specified parameters. |
| protected | HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported, boolean validateHeaders, int initialBufferSize)
Creates a new instance with the specified parameters. |
| protected | HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported, boolean validateHeaders, int initialBufferSize, boolean allowDuplicateContentLengths)
|
| Modifier and Type | Method and Description |
|---|---|
| public void | channelInboundEvent(ChannelHandlerContext ctx, Object evt)
Overrides default io. |
| private long | |
| protected abstract HttpMessage | |
| protected abstract HttpMessage | |
| protected void | decode(ChannelHandlerContext
the ctx, Buffer ChannelHandlerContext which this ByteToMessageDecoder belongs tothe buffer)Buffer from which to read dataImplements abstract io. Buffer to another.
|
| protected void | decodeLast(ChannelHandlerContext ctx, Buffer in)
Overrides io. ChannelHandlerContext goes in-active.
|
| private static int | |
| private static int | |
| private static int | |
| private static int | |
| private static int | |
| protected void | handleTransferEncodingChunkedWithContentLength(HttpMessage message)
Invoked when a message with both a "Transfer-Encoding: chunked" and a "Content-Length" header field is detected. |
| private HttpContent | |
| private HttpMessage | |
| private HttpMessage | |
| protected boolean | |
| protected abstract boolean | |
| private static boolean | |
| private static boolean | |
| protected boolean | isSwitchingToNonHttp1Protocol(HttpResponse msg)
Returns true if the server switched to a different protocol than HTTP/1.0 or HTTP/1.1, e.g. HTTP/2 or Websocket. |
| private HttpObjectDecoder. | |
| private LastHttpContent | |
| public void | |
| private void | |
| private void | |
| private static String[] |
| allowDuplicateContentLengths | back to summary |
|---|---|
| private final boolean allowDuplicateContentLengths | |
| chunkedSupported | back to summary |
|---|---|
| private final boolean chunkedSupported | |
| chunkSize | back to summary |
|---|---|
| private long chunkSize | |
| contentLength | back to summary |
|---|---|
| private long contentLength | |
| currentState | back to summary |
|---|---|
| private HttpObjectDecoder. | |
| DEFAULT_ALLOW_DUPLICATE_CONTENT_LENGTHS | back to summary |
|---|---|
| public static final boolean DEFAULT_ALLOW_DUPLICATE_CONTENT_LENGTHS | |
| DEFAULT_CHUNKED_SUPPORTED | back to summary |
|---|---|
| public static final boolean DEFAULT_CHUNKED_SUPPORTED | |
| DEFAULT_INITIAL_BUFFER_SIZE | back to summary |
|---|---|
| public static final int DEFAULT_INITIAL_BUFFER_SIZE | |
| DEFAULT_MAX_HEADER_SIZE | back to summary |
|---|---|
| public static final int DEFAULT_MAX_HEADER_SIZE | |
| DEFAULT_MAX_INITIAL_LINE_LENGTH | back to summary |
|---|---|
| public static final int DEFAULT_MAX_INITIAL_LINE_LENGTH | |
| DEFAULT_VALIDATE_HEADERS | back to summary |
|---|---|
| public static final boolean DEFAULT_VALIDATE_HEADERS | |
| EMPTY_VALUE | back to summary |
|---|---|
| private static final String EMPTY_VALUE | |
| headerParser | back to summary |
|---|---|
| private final HttpObjectDecoder. | |
| lineParser | back to summary |
|---|---|
| private final HttpObjectDecoder. | |
| message | back to summary |
|---|---|
| private HttpMessage message | |
| name | back to summary |
|---|---|
| private CharSequence name | |
| resetRequested | back to summary |
|---|---|
| private volatile boolean resetRequested | |
| trailer | back to summary |
|---|---|
| private LastHttpContent<?> trailer | |
| validateHeaders | back to summary |
|---|---|
| protected final boolean validateHeaders | |
| value | back to summary |
|---|---|
| private CharSequence value | |
| HttpObjectDecoder | back to summary |
|---|---|
| protected HttpObjectDecoder() Creates a new instance with the default
| |
| HttpObjectDecoder | back to summary |
|---|---|
| protected HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported) Creates a new instance with the specified parameters. | |
| HttpObjectDecoder | back to summary |
|---|---|
| protected HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported, boolean validateHeaders) Creates a new instance with the specified parameters. | |
| HttpObjectDecoder | back to summary |
|---|---|
| protected HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported, boolean validateHeaders, int initialBufferSize) Creates a new instance with the specified parameters. | |
| HttpObjectDecoder | back to summary |
|---|---|
| protected HttpObjectDecoder(int maxInitialLineLength, int maxHeaderSize, boolean chunkedSupported, boolean validateHeaders, int initialBufferSize, boolean allowDuplicateContentLengths) | |
| channelInboundEvent | back to summary |
|---|---|
| public void channelInboundEvent(ChannelHandlerContext ctx, Object evt) throws Exception Overrides default io. Doc from io. Gets called if a custom inbound event happened.
| |
| contentLength | back to summary |
|---|---|
| private long contentLength() | |
| createInvalidMessage | back to summary |
|---|---|
| protected abstract HttpMessage createInvalidMessage(ChannelHandlerContext ctx) | |
| createMessage | back to summary |
|---|---|
| protected abstract HttpMessage createMessage(String[] initialLine) throws Exception | |
| decode | back to summary |
|---|---|
| protected void decode(ChannelHandlerContext ctx, Buffer buffer) throws Exception Implements abstract io. Doc from io. Decode the from one
| |
| decodeLast | back to summary |
|---|---|
| protected void decodeLast(ChannelHandlerContext ctx, Buffer in) throws Exception Overrides io. Doc from io. Is called one last time when the
| |
| findEndOfString | back to summary |
|---|---|
| private static int findEndOfString(AppendableCharSequence sb) | |
| findNonSPLenient | back to summary |
|---|---|
| private static int findNonSPLenient(AppendableCharSequence sb, int offset) | |
| findNonWhitespace | back to summary |
|---|---|
| private static int findNonWhitespace(AppendableCharSequence sb, int offset) | |
| findSPLenient | back to summary |
|---|---|
| private static int findSPLenient(AppendableCharSequence sb, int offset) | |
| getChunkSize | back to summary |
|---|---|
| private static int getChunkSize(String hex) | |
| handleTransferEncodingChunkedWithContentLength | back to summary |
|---|---|
| protected void handleTransferEncodingChunkedWithContentLength(HttpMessage message) Invoked when a message with both a "Transfer-Encoding: chunked" and a "Content-Length" header field is detected. The default behavior is to remove the Content-Length field, but this method could be overridden to change the behavior (to, e.g., throw an exception and produce an invalid message). See: RFC 7230 section-3.3.3:
If a message is received with both a Transfer-Encoding and a
Content-Length header field, the Transfer-Encoding overrides the
Content-Length. Such a message might indicate an attempt to
perform request smuggling (Section 9.5) or response splitting
(Section 9.4) and ought to be handled as an error. A sender MUST
remove the received Content-Length field prior to forwarding such
a message downstream.
Also see:
https://github.com/apache/tomcat/blob/b693d7c1981/java/org/apache/coyote/http11/Http11Processor.java#L747-L755
https://github.com/nginx/nginx/blob/0ad4393e30c11/src/http/ngx_http_request.c#L1946-L1953
| |
| invalidChunk | back to summary |
|---|---|
| private HttpContent | |
| invalidMessage | back to summary |
|---|---|
| private HttpMessage invalidMessage(ChannelHandlerContext ctx, Buffer in, Exception cause) | |
| invalidMessage | back to summary |
|---|---|
| private HttpMessage invalidMessage(ChannelHandlerContext ctx, Exception cause) | |
| isContentAlwaysEmpty | back to summary |
|---|---|
| protected boolean isContentAlwaysEmpty(HttpMessage msg) | |
| isDecodingRequest | back to summary |
|---|---|
| protected abstract boolean isDecodingRequest() | |
| isOWS | back to summary |
|---|---|
| private static boolean isOWS(char ch) | |
| isSPLenient | back to summary |
|---|---|
| private static boolean isSPLenient(char c) | |
| isSwitchingToNonHttp1Protocol | back to summary |
|---|---|
| protected boolean isSwitchingToNonHttp1Protocol(HttpResponse msg) Returns true if the server switched to a different protocol than HTTP/1.0 or HTTP/1.1, e.g. HTTP/2 or Websocket. Returns false if the upgrade happened in a different layer, e.g. upgrade from HTTP/1.1 to HTTP/1.1 over TLS. | |
| readHeaders | back to summary |
|---|---|
| private HttpObjectDecoder. | |
| readTrailingHeaders | back to summary |
|---|---|
| private LastHttpContent | |
| reset | back to summary |
|---|---|
| public void reset() Resets the state of the decoder so that it is ready to decode a new message.
This method is useful for handling a rejected request with | |
| resetNow | back to summary |
|---|---|
| private void resetNow() | |
| splitHeader | back to summary |
|---|---|
| private void splitHeader(AppendableCharSequence sb) | |
| splitInitialLine | back to summary |
|---|---|
| private static String[] splitInitialLine(AppendableCharSequence sb) | |
| Modifier and Type | Field and Description |
|---|---|
| private final int | |
| private final AppendableCharSequence | |
| pack-priv int |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| protected final void | |
| protected TooLongFrameException | |
| public AppendableCharSequence | |
| public boolean | |
| public void |
| maxLength | back to summary |
|---|---|
| private final int maxLength | |
| seq | back to summary |
|---|---|
| private final AppendableCharSequence seq | |
| size | back to summary |
|---|---|
| pack-priv int size | |
| HeaderParser | back to summary |
|---|---|
| pack-priv HeaderParser(AppendableCharSequence seq, int maxLength) | |
| increaseCount | back to summary |
|---|---|
| protected final void increaseCount() | |
| newException | back to summary |
|---|---|
| protected TooLongFrameException newException(int maxLength) | |
| parse | back to summary |
|---|---|
| public AppendableCharSequence parse(Buffer buffer) | |
| process | back to summary |
|---|---|
| public boolean process(byte value) Implements io.
| |
| reset | back to summary |
|---|---|
| public void reset() | |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| protected TooLongFrameException | newException(int maxLength)
Overrides io. |
| public AppendableCharSequence | |
| public boolean | process(byte value)
Overrides io. Implements io. |
| LineParser | back to summary |
|---|---|
| pack-priv LineParser(AppendableCharSequence seq, int maxLength) | |
| newException | back to summary |
|---|---|
| protected TooLongFrameException newException(int maxLength) Overrides io.
| |
| parse | back to summary |
|---|---|
| public AppendableCharSequence parse(Buffer buffer) Overrides io.
| |
| process | back to summary |
|---|---|
| public boolean process(byte value) Overrides io. Implements io.
| |
HttpObjectDecoder.
Internal use only.
| Modifier and Type | Field and Description |
|---|---|
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. | |
| public static final HttpObjectDecoder. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static HttpObjectDecoder. | |
| public static HttpObjectDecoder. |
| BAD_MESSAGE | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_CHUNK_DELIMITER | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_CHUNK_FOOTER | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_CHUNK_SIZE | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_CHUNKED_CONTENT | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_FIXED_LENGTH_CONTENT | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_HEADER | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_INITIAL | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| READ_VARIABLE_LENGTH_CONTENT | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| SKIP_CONTROL_CHARS | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| UPGRADED | back to summary |
|---|---|
| public static final HttpObjectDecoder. | |
| State | back to summary |
|---|---|
| private State() | |
| valueOf | back to summary |
|---|---|
| public static HttpObjectDecoder. | |
| values | back to summary |
|---|---|
| public static HttpObjectDecoder. | |