我计划在我的应用程序上使用omnifaces,它通过网络传输大量数据。我已经在omnifaces展示中配置了web.xml文件,如下所示
<filter>
<filter-name>gzipResponseFilter</filter-name>
<filter-class>org.omnifaces.filter.GzipResponseFilter</filter-class>
<init-param>
<description>
The threshold size in bytes. Must be a number between 0 and 9999. Defaults to 500.
</description>
<param-name>threshold</param-name>
<param-value>500</param-value>
</init-param>
<init-param>
<description>
The mimetypes which needs to be compressed. Must be a commaseparated string. Defaults to the below values.
</description>
<param-name>mimetypes</param-name>
<param-value>
text/plain, text/html, text/xml, text/css, text/javascript, text/csv, text/rtf,
application/xml, application/xhtml+xml, application/javascript, application/json
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>gzipResponseFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
我使用curl测试尺寸,但我没有注意到任何显着的差异。 没有gzip配置
curl http://localhost:8080/omnifaces-test/ > t
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1666 100 1666 0 0 126k 0 --:--:-- --:--:-- --:--:-- 147k
使用gzip配置
curl http://localhost:8080/omnifaces-test/ > t
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1666 100 1666 0 0 283k 0 --:--:-- --:--:-- --:--:-- 406k
你能告诉我为什么上面两个命令没有任何区别吗?
答案 0 :(得分:2)
当客户端也支持时,GzipResponseFilter
仅返回gzip压缩响应。这由Accept-Encoding
请求标头确定。如果客户端(在您的情况下为curl)与请求一起发送Accept-Encoding: gzip
标头,则过滤器将为大于500字节的响应打开GZIP压缩。
如果在您的网络应用中启用GzipResponseFilter
后没有看到卷曲结果有任何差异,那么显然curl默认情况下不会设置Accept-Encoding: gzip
标头。那么你会得到“正常”的回应。您需要查阅curl文档,了解如何设置此标头。为所有请求打开gzip压缩没有任何意义;如果客户端不支持它,它将如何解压缩它呢?
顺便说一下,这两个过滤器初始化参数已经是默认值。您可以从web.xml
中省略它们。只有在要指定不同于默认值的值时,才需要指定它们。另请参阅documentation。