如何使用 Netty deflator 压缩发送到浏览器的响应

Sun*_*dar 2 java gzip netty

我正在尝试使用 netty 中可用的压缩器,在通道管道中添加了以下行

pipeline.addLast("gzip", new HttpContentCompressor());
Run Code Online (Sandbox Code Playgroud)

我将响应标头设置"Content-Encoding""gzip".

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

response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8));
Run Code Online (Sandbox Code Playgroud)

其中responseText--> 我想要发送到浏览器的字符串。

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

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

我应该 gzipresponseText然后做一个setContent(gzippedResponse)吗?或者我在这里遗漏了什么?

Vee*_*ebs 5

  • 您不需要将响应标头“Content-Encoding”设置为“gzip”。Netty 为你做这件事。看看是HttpContentEncoder从哪HttpContentCompressor继承的。

  • 您不需要 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());
    
    Run Code Online (Sandbox Code Playgroud)