Java 如何使用Netty平减指数压缩发送到浏览器的响应
我正在尝试使用netty提供的压缩机,在channel pipeline中添加了以下行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-->我要发
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流
我是否应该gzipresponseText
,然后执行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());
request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING,HttpHeaders.Values.GZIP)中传递以下标头代码>