首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式设置Jetty GzipHandler

以编程方式设置Jetty GzipHandler
EN

Stack Overflow用户
提问于 2014-07-02 01:08:08
回答 3查看 9.4K关注 0票数 7

我正在使用Jetty GzipHandler,它的工作方式似乎很奇怪:它只压缩已经压缩的文件。

我的整个计划是

代码语言:javascript
运行
复制
GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setHandler(myHandler);
server.setHandler(gzipHandler);

浏览器(铬)总是发送一个包含

代码语言:javascript
运行
复制
Accept-Encoding:gzip,deflate,sdch

所以根据文件

GZIP这个处理程序将gzip响应的内容,如果:

  • 过滤器映射到匹配路径。
  • 响应状态代码为>=200和<300
  • 内容长度未知或大于minGzipSize initParameter或minGzipSize为0(默认)
  • 内容类型位于mimeTypes initParameter中以逗号分隔的initParameter列表中,或者如果没有定义mimeTypes,则内容类型不是"application/gzip“。
  • 资源没有指定任何内容编码。

这对两个人都有好处。我只是不确定path部分,但是没有指定任何部分,我希望两者都能工作,或者两者都不起作用。

我用window.location.reload(true)来强制重新装填。标题相当长,所以我要链接它们:csspng

我试过设置一些属性,但没有成功。如果我找到jetty-servlets-9.1.3.v20140225-sources.jar,我将调试它。问题是:为什么GzipHandler决定只压缩压缩的文件?它是完全确定的:jpgpng被压缩(不管有多小),没有其他文件可以压缩。

更新

通过setMimeTypes,我可以排除这些图像。我调试了它,我仍然不知道为什么其他静态资源从未被压缩。我再次检查了myHandler是否一致地对待它们(它们都直接从预先计算的Map<String, byte[]>中得到服务)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-05 12:34:59

我们可以使用GzipFilter并实现这一结果。GzipFilter的Jetty文档提供了许多细节支持的参数列表。若要以编程方式启用它,请使用把这个问题提出来

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

样本滤波器配置

代码语言:javascript
运行
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2016-03-08 15:13:15

下面是如何在Jetty9.3.7中配置GzipHandler:

代码语言:javascript
运行
复制
GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setIncludedMimeTypes("text/html", "text/plain", "text/xml", 
            "text/css", "application/javascript", "text/javascript");
gzipHandler.setHandler(myHandler);
handlerList.addHandler(gzipHandler);

在这种情况下,myHandlerResourceHandler的一个实例。默认情况下,Gzip Handler只使用200范围内的响应代码对GET请求进行Gzip响应。

票数 11
EN

Stack Overflow用户

发布于 2018-12-17 02:27:24

对于下一个用户,下面是如何启用请求解压缩,其中handler是扩展org.eclipse.jetty.server.handler.AbstractHandler的一个类。请求解压缩的重要部分是includeMethods (默认为GET )和inflateBuffer (需要大于0,但默认为0)。“守则”:

代码语言:javascript
运行
复制
    //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();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24521426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档