Java 为什么我的HTTP消息被标记为分块?

Java 为什么我的HTTP消息被标记为分块?,java,http,netty,chunking,Java,Http,Netty,Chunking,我正在使用Netty 3.10.5和HttpClientCodec。某个接收到的HTTP响应总是被标记为分块,尽管它实际上不是。这是非常糟糕的,因为响应从未通过以下HttpChunkAggregator,因为HttpClientCodec没有生成HTTP块 接收到的响应包含一些小于最大块大小的内容。但是响应没有内容长度头。通过调试,我发现HttpMessageDecoder是一个ReplayingDecoder,它在这里检查分块: case READ_VARIABLE_LENGTH_CONTEN

我正在使用Netty 3.10.5和HttpClientCodec。某个接收到的HTTP响应总是被标记为分块,尽管它实际上不是。这是非常糟糕的,因为响应从未通过以下HttpChunkAggregator,因为HttpClientCodec没有生成HTTP块

接收到的响应包含一些小于最大块大小的内容。但是响应没有内容长度头。通过调试,我发现HttpMessageDecoder是一个ReplayingDecoder,它在这里检查分块:

case READ_VARIABLE_LENGTH_CONTENT:
if (buffer.readableBytes() > maxChunkSize || HttpHeaders.is100ContinueExpected(message)) {
    // Generate HttpMessage first.  HttpChunks will follow.
    checkpoint(State.READ_VARIABLE_LENGTH_CONTENT_AS_CHUNKS);
    message.setChunked(true);
    return message;
}
break;
对于ReplayDecoder,在我的例子中使用的方法
readableBytes()
返回
Integer.MAX_VALUE-buf().readerIndex()


这就是我的邮件被标记为分块的原因。但这项检查是否可能有问题?

分块应该对应用程序透明。任何强迫用户了解分块的http API都是设计不当的。尽管如此,如果http库将非分块消息作为分块消息提供给应用程序,这应该不是问题。我认为问题可能是没有内容长度头,对吗?因为您的内容小于最大区块大小。是的,邮件本身并不完美。但是,如果对reabable字节的净检查会返回正确的数字,那么我认为处理这个不完美的消息不会有问题。