Netty has problem to deal with the "Connection: close" message ... We cannot read the content.

"이희승 (Trustin Lee)" trustin at gmail.com
Wed Jun 3 04:21:40 EDT 2009


1) Netty HTTP decoder never closes the connection.  If the connection is 
closed, it's the remote peer (server in your case) or your handler 
implementation.  Please let me know if you still think Netty HTTP 
decoder closes the connection.

2) If there's no way to know the length of the content, Netty transforms 
a non-chunked HTTP message into a chunked HTTP message.

In case of last response, the length of content is only determined when 
the connection is closed.  Because it is not safe to buffer the whole 
content until the connection is closed, Netty generates HttpMessage with 
no content first and then HttpChunks.

Your handler should be able to handle this case because any HTTP server 
can send you a chunked HTTP message.  Please make sure that you handle 
HttpChunk message properly.  The HttpClient example already handles such 
a case, so you could refer to the example.

If you do not like this behavior but just want to limit the content 
length, you can insert HttpChunkAggregator right after 
Http(Request|Response)Decoder in the pipeline.  Then you will never 
receive HttpChunk, and an exception will be raised if the content length 
is too large.

Please let me know if HttpChunk is not received at all for the last 
response - it might be a bug then.

HTH,
Trustin

On 03-Jun-2009 04:02, Huican Ping wrote:
>
> More information:
>
> The messageReceived() message is same logic as the ones at http example
> where it does
> check "respStatus.getCode() == 200&&  resp.isChunked() "
>
> I noticed for the headers at 100th response:
> 	HTTP/1.1 200 OK
> 	Server: Apache-Coyote/1.1
> 	Content-Type: text/xml;charset=UTF-8
> 	Date: Tue, 02 Jun 2009 15:50:12 GMT
> 	Connection: close
>
> That resp.isChunked() returns true !! While stepping into the code (at
> DefaultHttpMessage.java isChunked() method), and I dumpped out headers, it
> has Transfer-Encoding (which I don't know who added it mysteriously).
>    {Connection=[close], Content-Type=[text/xml;charset=UTF-8], Date=[Tue, 02
> Jun 2009 18:29:59 GMT], Server=[Apache-Coyote/1.1],
> Transfer-Encoding=[chunked]}
>
>
>
> Huican Ping wrote:
>>
>> I am using the 3.1.0.Beta3.
>>
>> That 100th message has no "content-length" header, but has "connection:
>> close" inside. It is still a valid message.
>>
>> Any suggestion or workaround?
>>
>




More information about the netty-users mailing list