Jersey 2/Grizzly中的GZIP编码

Jersey 2/Grizzly中的GZIP编码,jersey,gzip,grizzly,Jersey,Gzip,Grizzly,我无法在我的Jersey服务中激活gzip编码。这就是我尝试过的: 从中的jersey-quickstart-grizzly2原型开始 添加了rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class) (也尝试了rc.register(org.glassfish.jersey.message.GZipEncoder.class);) 从mvn exec:java开始 使用curl--compressed-v-o-htt

我无法在我的Jersey服务中激活gzip编码。这就是我尝试过的:

  • 从中的
    jersey-quickstart-grizzly2
    原型开始

  • 添加了
    rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class)

    (也尝试了
    rc.register(org.glassfish.jersey.message.GZipEncoder.class);

  • mvn exec:java开始

  • 使用
    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!
    
    >GET/myapp/myresource HTTP/1.1
    >用户代理:curl/7.22.0(x86_64-pc-linux-gnu)libcurl/7.22.0 zlib/1.2.3.4。。。
    >主机:本地主机:8080
    >接受:*/*
    >接受编码:deflate,gzip
    > 
    
    也就是说,尽管请求中有
    Accept-Encoding:deflate,gzip
    ,但响应中没有
    Content-Encoding:gzip

    我在这里遗漏了什么???

    请尝试以下代码:

    HttpServer HttpServer=GrizzlyHttpServerFactory.createHttpServer(
    基本URI,rc,false);
    压缩配置压缩配置=
    httpServer.getListener(“grizzly”).getCompressionConfig();
    compressionConfig.setCompressionMode(compressionConfig.CompressionMode.ON);//模式
    compressionConfig.setCompressionMinSize(1);//要压缩的最小字节数
    compressionConfig.setcompressablemmetypes(“text/plain”、“text/html”);//要压缩的mime类型
    httpServer.start();
    
    您还必须注册
    org.glassfish.jersey.server.filter.EncodingFilter
    。此示例启用
    deflate
    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);
    }
    

    此解决方案是特定于jersey的,不仅适用于Grizzly,还适用于JDK Http服务器。

    似乎可以做到这一点!我使用的是Grizzly 2.2.3思想,因此我没有
    CompressConfig
    ,但是
    NetworkListener
    上提供了相应的方法。谢谢这是我唯一需要的东西。