Http 以编程方式设置Jetty GzipHandler

Http 以编程方式设置Jetty GzipHandler,http,compression,jetty,embedded-jetty,Http,Compression,Jetty,Embedded Jetty,我在玩JettyGzipHandler,它的工作原理似乎很奇怪:它只压缩已经压缩的文件 我的整个设置是 GzipHandler gzipHandler = new GzipHandler(); gzipHandler.setHandler(myHandler); server.setHandler(gzipHandler); 浏览器(Chromium)总是发送一个包含 Accept-Encoding:gzip,deflate,sdch 所以根据文件 GZIP处理程序此处理程序将GZIP响应的

我在玩Jetty
GzipHandler
,它的工作原理似乎很奇怪:它只压缩已经压缩的文件

我的整个设置是

GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setHandler(myHandler);
server.setHandler(gzipHandler);
浏览器(Chromium)总是发送一个包含

Accept-Encoding:gzip,deflate,sdch
所以根据文件

GZIP处理程序此处理程序将GZIP响应的内容,如果:

  • 过滤器映射到匹配的路径

  • 响应状态代码>=200,我们可以使用GzipFilter来实现这个结果。的Jetty文档提供了大量详细信息支持的参数列表。要以编程方式启用它

    gzip过滤器基本上是一个服务器端过滤器,在处理压缩需求方面非常有效

    样本过滤器配置

    <filter>
     <filter-name>GZipFilter</filter-name>
     <display-name>Jetty's GZip Filter</display-name>
     <description>Filter that zips all the content on-the-fly</description>
     <filter-class>org.mortbay.servlet.GzipFilter</filter-class>
     <init-param>
      <param-name>mimeTypes</param-name>
      <param-value>text/html</param-value>
     </init-param>
    </filter>
    
    <filter-mapping>
     <filter-name>GZipFilter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    GZipFilter
    Jetty的GZip过滤器
    过滤器,可动态压缩所有内容
    org.mortbay.servlet.gzip过滤器
    模版
    文本/html
    GZipFilter
    /*
    
    以下是我如何在Jetty 9.3.7中配置GzipHandler的:

    GzipHandler gzipHandler = new GzipHandler();
    gzipHandler.setIncludedMimeTypes("text/html", "text/plain", "text/xml", 
                "text/css", "application/javascript", "text/javascript");
    gzipHandler.setHandler(myHandler);
    handlerList.addHandler(gzipHandler);
    

    在本例中,
    myHandler
    ResourceHandler
    的一个实例。默认情况下,Gzip处理程序只对响应代码在200范围内的
    GET
    请求进行Gzip响应。

    对于下一个出现的人,下面介绍如何启用请求解压缩,其中
    Handler
    是一个扩展
    org.eclipse.jetty.server.Handler.AbstractHandler
    的类。请求解压缩的重要部分是
    includeMethods
    ,默认为
    GET
    ,以及
    inflateBuffer
    ,需要大于0,但默认为0。守则:

        //create server using given threadpool
        Server server = new Server(8080);
    
        GzipHandler gzipHandler = new GzipHandler();
        gzipHandler.setIncludedMethods("PUT", "POST", "GET");
        gzipHandler.setInflateBufferSize(2048);
        gzipHandler.setHandler(handler);
        server.setHandler(gzipHandler);
    
        server.start();
        server.join();
    

    我想,你是对的,但是使用过滤器看起来比自己做压缩工作要多(缺点是可能有bug)。到目前为止,我所做的是通过预计算的压缩数据来处理静态资源,这相当简单。不要重新发明轮子。不要手动写入压缩逻辑。这个问题已经解决了很多次。添加过滤器可能看起来很复杂,但事实并非如此。我已经用过滤器配置更新了我的答案,如果这有帮助的话,我已经重新发明了轮子,它可能比运行过滤器更简单(因为我还没有使用过滤器,也没有使用XML等等)。目前,我仅将其用于预取资源(这已经足够了;我将它们都保存在内存中进行压缩和未压缩)。jetty>8中不推荐使用GzipFilter,应使用GzipHandler。现在我想知道…GzipFilter不仅不受欢迎,而且被一个无效的无操作存根所取代。请参阅:什么是handlerList类型?你能发布完整的代码吗?这是我的@Configuration类吗?
    handlerList
    的类型是
    handlerList
    。基本上我的代码是这样的:
    servers=
    HandlerList HandlerList=new HandlerList()
    handlerList.add(…)
    s.setHandlerList(handlerList)
    handlerList.start()
    s.start()
    我没有使用
    @配置
    ,所以我无法回答这个问题。谢谢。我在pom.xml中使用嵌入式maven jetty。上述代码是否有可能集成到我的嵌入式jetty中?