2013-11-03 19 views
8

我无法在我的Jersey服务中激活gzip编码。这是我已经试过:Jersey 2中的GZIP编码/ Grizzly

  1. 开始了从Getting Started Guidejersey-quickstart-grizzly2原型。

  2. 新增rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class);

    (也试图rc.register(org.glassfish.jersey.message.GZipEncoder.class);)入门mvn exec:java

  3. curl --compressed -v -o - http://localhost:8080/myapp/myresource

结果测试

  • 如下:

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

    也就是说,尽管请求中有Accept-Encoding: deflate, gzip,但在响应中没有Content-Encoding: gzip

    我在这里错过了什么?

  • 回答

    8

    尝试像代码:

    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(); 
    
    +0

    似乎要做的伎俩!我在灰熊2.2.3的想法,所以我没有'CompressConfig',但相应的方法可用'NetworkListener'。谢谢! – aioobe

    +0

    是的,请。使用灰熊2.3.5+ – alexey

    9

    你必须注册org.glassfish.jersey.server.filter.EncodingFilter为好。这个例子使deflategzip压缩:

    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); 
    } 
    

    这种解决方案的球衣具体的工作不仅与灰熊,但与JDK HTTP服务器也是如此。

    相关问题