【发布时间】:2014-08-22 16:08:00
【问题描述】:
我在玩 Jetty GzipHandler,它的工作似乎很奇怪:它只压缩已经压缩的文件。
我的整个设置是
GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setHandler(myHandler);
server.setHandler(gzipHandler);
浏览器(Chromium)总是发送一个包含
的标头Accept-Encoding:gzip,deflate,sdch
所以根据文档
GZIP 处理程序 如果满足以下条件,此处理程序将压缩响应的内容:
- 过滤器映射到匹配路径
- 响应状态码 >=200 和
- 内容长度未知或大于 minGzipSize initParameter 或 minGzipSize 为 0(默认)
- 内容类型位于 mimeTypes initParameter 中设置的以逗号分隔的 mimeType 列表中,或者如果未定义任何 mimeType,则内容类型不是“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[]> 得到服务)。
【问题讨论】:
标签: http compression jetty embedded-jetty