我也要回答这个问题,因为我已经做了大量的工作,我终于做到了。另外,我并不是HTTP细节方面的专家,所以我会给出非专业的答案。
首先,我是如何检查我的GZipFilter是否工作。开始使用Firefox,确保我拥有Firebug插件,启动Firebug插件,进入“网络”选项卡。然后我访问了应该返回GZip的响应的URL。下面是萤火虫显示:
“尺寸”列显示响应的大小。如果将鼠标悬停在“大小”列标签上,它会告诉您,如果响应被压缩,则它会显示响应的压缩大小。
这一切都是在Jetty中启用的GZip过滤器完成的。然后我从我的web.xml中删除了GZip过滤器声明,重新启动了Jetty并重复了测试。这次响应的尺寸与之前的尺寸完全相同,这清楚地表明GZip压缩不起作用。
经过多次试验和错误,我所做的是在Firebug的“请求标题”部分查看“Accept”标题的值。我注意到,这里有“application/xml”和“text/xml”等值,但是我配置GZIp过滤器的初始参数“mimeTypes”的方式只包含“text/xml”(并且缺少了“应用程序/ XML“)。它配置,像这样:
<filter>
<filter-name>GzipFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
<init-param>
<param-name>mimeTypes</param-name>
<param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
加入了“应用程序/ XML”值列表,像这样经过:
<filter>
<filter-name>GzipFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
<init-param>
<param-name>mimeTypes</param-name>
<param-value>text/html,text/plain,text/xml,application/xhtml+xml,application/xml,text/css,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我重做我以前的测试,果然,现在的报告的大小反应要小得多:
另请注意,现在报道的响应头包含称为“内容编码”的额外字段的值“压缩”。
所以基本上这个想法是检查你的请求“接受”头发送什么样的值,并确保所有这些值都配置在GZip过滤器的“mimeTypes”初始参数。
我终于有时间回到这个问题。我没有收到任何错误。但是我没有看到实际发生的任何gzip。我如何检查过滤器是否实际运行? – Misha 2010-09-27 17:30:16
@Misha,你可以使用TCP数据包跟踪软件,或使用一些在线工具检查,如http://www.gidnetwork.com/tools/gzip-test.php – spektom 2011-06-19 13:21:40