2011-12-22 44 views
2

我想利用現有的壓縮機網狀的響應,增加通道的管道下面一行如何使用Netty的平減指數來壓縮發送到瀏覽器

pipeline.addLast("gzip", new HttpContentCompressor()); 

"Content-Encoding"設置響應頭"gzip"

我在這裏的問題是如何設置的內容,我嘗試以下

response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8)); 

其中responseText - >字符串,我要發送到瀏覽器。

我得到一個錯誤,內容是不是gzip流

org.jboss.netty.handler.codec.embedder.CodecEmbedderException: org.jboss.netty.handler.codec.compression.CompressionException: 壓縮失敗(-3):不是一個gzip流

我應該gzip壓縮responseText,然後做一個setContent(gzippedResponse)?還是我在這裏錯過了什麼?

回答

4
  • 您不需要將響應標頭「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()); 
    
+0

感謝@Veebs。這得到了東西的工作,異常的原因是我沒有通過請求後面的頭文件request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING,HttpHeaders.Values.GZIP);' – Sundar 2012-01-04 10:35:04

相關問題