我正在尝试使用netty中可用的压缩器,在 channel 管道中添加了以下行
pipeline.addLast("gzip", new HttpContentCompressor());
我将响应 header “Content-Encoding”
设置为“gzip”
。
我的问题是如何设置内容,我尝试了以下
response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8));
where responseText
--> 我想要发送到浏览器的字符串。
我收到一个错误,内容不是 gzip 流
org.jboss.netty.handler.codec.embedder.CodecEmbedderException: org.jboss.netty.handler.codec.compression.CompressionException: decompression failure (-3): not a gzip stream
我应该 gzip responseText
然后执行 setContent(gzippedResponse)
吗?或者我在这里遗漏了什么?
最佳答案
您无需将响应 header “Content-Encoding”设置为“gzip”。 Netty 为你做这件事。请参阅继承自
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());
关于java - 如何使用 Netty deflator 压缩发送到浏览器的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605519/