2013-11-03 8 views
8

Jerseyサービスでgzipエンコーディングを有効にすることはできません。Jersey 2/GrizzlyでのGZIPエンコーディング

  1. Getting Started Guideからjersey-quickstart-grizzly2原型で始まっ:これは私が試したものです。

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

    (またrc.register(org.glassfish.jersey.message.GZipEncoder.class);を試みた)mvn exec:javacurl --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はありません。

    私はここで何が欠けていますか?あなたにもorg.glassfish.jersey.server.filter.EncodingFilterを登録する必要が

    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(); 
    
  • 答えて

    8

    のようなコードを試してみてください。

    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サーバだけではなく機能します。この例ではdeflategzip圧縮を可能にします。

    +0

    このトリックを行うようです。私はGrizzly 2.2.3の考えであったので、私は 'CompressConfig'を持っていませんでしたが、対応するメソッドは' NetworkListener'で利用できました。ありがとう! – aioobe

    +0

    はい、pls。 Grizzly 2.3.5以降を使用する – alexey

    関連する問題