Decodes
ChannelBuffers into
HttpMessages and
HttpChunks.
Parameters that prevents excessive memory consumption
Name | Meaning |
maxInitialLineLength |
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
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
(or the length of each chunk) exceeds this value, the content or chunk
will be split into multiple
HttpChunks whose length is
maxChunkSize at maximum. |
Chunked Content
If the content of an HTTP message is greater than
maxChunkSize or
the transfer encoding of the HTTP message is 'chunked', this decoder
generates one
HttpMessage instance and its following
HttpChunks 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 4 objects:
- An
HttpRequest whose
HttpMessage#isChunked()property is
true,
- The first
HttpChunk whose content is
'abcdefghijklmnopqrstuvwxyz',
- The second
HttpChunk whose content is
'1234567890abcdef', and
- An
HttpChunkTrailer which marks the end of the content.
If you prefer not to handle
HttpChunks by yourself for your
convenience, insert
HttpChunkAggregator after this decoder in the
ChannelPipeline. However, please note that your server might not
be as memory efficient as without the aggregator.
Extensibility
Please note that this decoder is designed to be extended to implement
a protocol derived from HTTP, such as
RTSP and
ICAP.
To implement the decoder of such a derived protocol, extend this class and
implement all abstract methods properly.