Java 如何使用Netty平减指数压缩发送到浏览器的响应

Java 如何使用Netty平减指数压缩发送到浏览器的响应,java,gzip,netty,Java,Gzip,Netty,我正在尝试使用netty提供的压缩机,在channel pipeline中添加了以下行 pipeline.addLast("gzip", new HttpContentCompressor()); 我正在将响应头“内容编码”设置为“gzip” 我这里的问题是如何设置内容,我尝试了以下方法 response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8)); 其中responseText-->我要发

我正在尝试使用netty提供的压缩机,在channel pipeline中添加了以下行

pipeline.addLast("gzip", new HttpContentCompressor());
我正在将响应头
“内容编码”
设置为
“gzip”

我这里的问题是如何设置内容,我尝试了以下方法

response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8));
其中
responseText
-->我要发送到浏览器的字符串

我得到一个错误,内容不是gzip流

org.jboss.netty.handler.codec.embedder.CodecEmbedderException: org.jboss.netty.handler.codec.compression.compression异常: 解压缩失败(-3):不是gzip流

我是否应该gzip
responseText
,然后执行
setContent(gzip响应)
?还是我在这里遗漏了什么?

  • 您不需要将响应头“Content Encoding”设置为“gzip”。内蒂为你做的。请参见继承自
    HttpContentCompressor
    HttpContentEncoder

  • 您不需要gzip
    responseText

  • 您的管道应该如下所示:

    // Create a default pipeline implementation.
    ChannelPipeline pipeline = pipeline();
    
    // Decodes ChannelBuffer into HTTP Request message
    pipeline.addLast("decoder", new HttpRequestDecoder());
    
    // Encodes HTTTPRequest message to ChannelBuffer
    pipeline.addLast("encoder", new HttpResponseEncoder());
    
    // Compress
    pipeline.addLast("deflater", new HttpContentCompressor(1));
    
    // Handler to dispatch processing to our services
    pipeline.addLast("handler", new YourHttpRequestHandler());
    

谢谢@Veebs。这使得工作正常,出现异常的原因是我没有在request
request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING,HttpHeaders.Values.GZIP)中传递以下标头