jersey gzip grizzly

Codificación GZIP en Jersey 2/Grizzly



(2)

No puedo activar la codificación gzip en mi servicio Jersey. Esto es lo que he intentado:

  1. Comenzó con el arquetipo jersey-quickstart-grizzly2 de la Guía de introducción .

  2. Se agregó rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class);

    (también han intentado rc.register(org.glassfish.jersey.message.GZipEncoder.class); )

  3. Comenzó con mvn exec:java

  4. Probado con curl --compressed -v -o - http://localhost:8080/myapp/myresource

El resultado es el siguiente:

> GET /myapp/myresource HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 zlib/1.2.3.4 ... > Host: localhost:8080 > Accept: */* > Accept-Encoding: deflate, gzip > < HTTP/1.1 200 OK < Content-Type: text/plain < Date: Sun, 03 Nov 2013 08:07:10 GMT < Content-Length: 7 < * Connection #0 to host localhost left intact * Closing connection #0 Got it!

Es decir, a pesar de Accept-Encoding: deflate, gzip en la solicitud, no hay Content-Encoding: gzip en la respuesta.

¿¿Que me estoy perdiendo aqui??


Pruebe el código como:

HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer( BASE_URI, rc, false); CompressionConfig compressionConfig = httpServer.getListener("grizzly").getCompressionConfig(); compressionConfig.setCompressionMode(CompressionConfig.CompressionMode.ON); // the mode compressionConfig.setCompressionMinSize(1); // the min amount of bytes to compress compressionConfig.setCompressableMimeTypes("text/plain", "text/html"); // the mime types to compress httpServer.start();


También debe registrar org.glassfish.jersey.server.filter.EncodingFilter . Este ejemplo habilita la compresión deflate y gzip :

import org.glassfish.jersey.message.DeflateEncoder; import org.glassfish.jersey.message.GZipEncoder; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.filter.EncodingFilter; ... private void enableCompression(ResourceConfig rc) { rc.registerClasses( EncodingFilter.class, GZipEncoder.class, DeflateEncoder.class); }

Esta solución es específica para el jersey y funciona no solo con Grizzly, sino también con el servidor JDK Http.