我正在使用Jetty GzipHandler
,它似乎工作得相当奇怪:它只压缩已压缩的文件。
我的整个设置是
GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setHandler(myHandler);
server.setHandler(gzipHandler);
浏览器(Chromium)始终发送包含
的标头Accept-Encoding:gzip,deflate,sdch
所以根据文件
GZIP Handler如果出现以下情况,此处理程序将gzip响应的内容:
- 过滤器映射到匹配路径
- 响应状态代码是> = 200且<300
- 内容长度未知或超过minGzipSize initParameter或minGzipSize为0(默认值)
- 内容类型位于mimeTypes initParameter中设置的逗号分隔的mimeTypes列表中,或者如果未定义mimeTypes,则content-type不是“application / gzip”
- 资源
未指定内容编码
它应该适用于两者。我只是不确定path
部分,但没有指明任何部分,我希望它对两者都有效,或者两者都没有。
我使用window.location.reload(true)
来强制重新加载。标题相当长,所以我将它们链接起来:css和png。
我试图设置一些属性,但没有任何成功。我应该找到吗?
jetty-servlets-9.1.3.v20140225-sources.jar
,我会调试它。问题是:为什么GzipHandler
决定只压缩压缩文件?这是完全确定的:jpg
和png
得到压缩(无论多小),没有其他文件。
通过setMimeTypes
我可以排除图像。我调试它,我仍然没有线索,为什么其他静态资源永远不会被压缩。我仔细检查myHandler
是否统一对待它们(它们都直接来自预先计算的Map<String, byte[]>
)。
答案 0 :(得分:8)
以下是我在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处理程序仅对GET
个请求进行gzip响应,响应代码为200范围。
答案 1 :(得分:2)
我们可以使用GzipFilter来实现这个结果。 GzipFilter的Jetty文档提供了许多详细信息支持的参数列表。要以编程方式启用它,refer this question。
GzipFilter基本上是一个服务器端过滤器,在处理压缩需求方面非常有效。
示例过滤器配置
<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 :(得分:1)
对于出现的下一个人,以下是启用请求解压缩的方法,其中ev_SS
是扩展handler
的类。请求解压缩的重要部分是org.eclipse.jetty.server.handler.AbstractHandler
(仅默认为includeMethods
)和GET
(需要大于0但默认为0)。代码:
inflateBuffer