2015-08-04 3 views
1

При получении ответа обратно с нетто-клиентским объектом я запускаю исключение FrameTooLongException. После получения tcpdump выяснилось, что полученный ответ является большим ответом Mutlipart Mime с примерно 200 частями (каждый с некоторыми короткими заголовками), но фактический HTTP-заголовок для ответа довольно мал и указан как;FrameTooLongException Mime Размер заголовка HTTP-заголовка

> Host: foobar.com:20804 
> Accept: */* 
> 
< HTTP/1.1 207 Multi-Status 
< Date: Tue, 04 Aug 2015 19:44:09 GMT 
< Vary: Accept 
< Content-Type: multipart/mixed; boundary="63602357878446117" 
< Content-Length: 33023 

Я не мог найти ничего в документации об этом, но заголовки Mime часть используется при расчете размера HTTP заголовка, и не Нетти разобрать его как таковой?

Исключение я получаю следующим образом:

io.netty.handler.codec.TooLongFrameException: HTTP header is larger than 8192 bytes. 
     at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.newException(HttpObjectDecoder.java:787) 
     at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.process(HttpObjectDecoder.java:779) 
     at io.netty.buffer.AbstractByteBuf.forEachByteAsc0(AbstractByteBuf.java:1022) 
     at io.netty.buffer.AbstractByteBuf.forEachByte(AbstractByteBuf.java:1000) 
     at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.parse(HttpObjectDecoder.java:751) 
     at io.netty.handler.codec.http.HttpObjectDecoder.readHeaders(HttpObjectDecoder.java:545) 
     at io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:221) 
     at io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:136) 
     at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:315) 
     at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:229) 
     at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:147) 
     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) 
     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) 
     at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1044) 
     at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:934) 
     at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:315) 
     at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:229) 
     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) 
     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) 
     at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847) 
     at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 
     at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) 
     at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) 
     at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 
     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 
+0

Не могли бы вы разместить пример заголовка до части тела? –

+0

@ FredericBrégier Отредактированный вопрос с информацией заголовка – ZacAttack

ответ

1

Http заголовок заканчивается 2 CR/LF (например, между Accept и HTTP в вашем примере), и заголовок должен начинаться с «старт линии» (HTTP/1.1 ...).

Поэтому я вижу 2 проблемы с вашим примером:

  1. Ваш заголовок не запускается правильно: HTTP/1.1 должны быть в первой строке, а затем позже ваши принимают и другие Params заголовка хоста.
  2. Возможно, в вашем ответе есть что-то не так, что между вашим заголовком и телом нет 2 cr /, что приводит к расшифровке тела, как если бы оно было частью заголовка, поэтому исключение ...
+0

Итак, я скопировал вышеуказанные заголовки с выхода curl. HTTP/1.1 - первая строка (обозначается знаком <, я буду редактировать). Глядя на tcpdump согласно вашей второй точке, я вижу два конца строки. – ZacAttack

+0

Если у вас есть проигрыватель, может быть интересно представить его как проблему в netty в github? –