2011-12-22 1 views
2

Je suis en train d'utiliser le compresseur disponible dans Netty, a ajouté la ligne suivante dans la canalisation de canalComment utiliser déflateur Netty pour compresser la réponse envoyée au navigateur

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

Je suis en train de l'en-tête de réponse "Content-Encoding"-"gzip".

Ma question est ici comment définir le contenu, j'ai essayé les éléments suivants

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

responseText -> Chaîne que je veux envoyer au navigateur.

je reçois une erreur que le contenu ne soit pas flux gzip

org.jboss.netty.handler.codec.embedder.CodecEmbedderException: org.jboss.netty.handler.codec.compression.CompressionException: échec de décompression (-3): non un flux gzip

Si je gzip le responseText puis faire un setContent(gzippedResponse)? ou est-ce que je manque quelque chose ici?

Répondre

4
  • Vous n'avez pas besoin de définir l'en-tête de réponse "Content-Encoding" sur "gzip". Netty le fait pour vous. Voir HttpContentEncoder dont HttpContentCompressor est héritée.

  • Vous n'avez pas besoin de gzip responseText.

  • Votre pipeline devrait ressembler à ceci:

    // 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

Merci @Veebs. Cela a fonctionné, la raison de l'exception était que je n'ai pas passé l'en-tête suivant dans la requête 'request.setHeader (HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP);' – Sundar

Questions connexes