9

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

  1. 从入门指南中的jersey-quickstart-grizzly2原型开始。

  2. 添加rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class);

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

  3. 开始于mvn exec:java

  4. 经测试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中,响应中没有。

我在这里想念什么?

4

2 回答 2

15

您也必须注册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);
}

这个解决方案是针对球衣的,不仅适用于 Grizzly,也适用于 JDK Http 服务器。

于 2014-03-31T13:59:03.447 回答
9

尝试如下代码:

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();
于 2013-11-04T07:27:46.483 回答