我正在使用jBoss EAP 6.1 sevrer,我想在其中为我的HTML,CSS和javaScript文件启用GZIP压缩。
我对这种压缩技术完全陌生,任何人都可以向我推荐一个教程,或者可以直接给我一个步骤,以便在Jboss EAP 6.1服务器上启用压缩。
除此之外,我有以下疑问:
1)我是否需要压缩工作区中的文件,或者如果我的jboss服务器将启用压缩,它将负责压缩,我只需要部署战争。
2)当服务器响应我的请求时,我是否需要显式转换或解码或解压缩文件以使用它们或解释它们?
答案 0 :(得分:2)
Web资源的GZIP压缩是可选的,因此您无法压缩所有这些资源,然后希望每个Web客户端都能够处理它。这就是为什么它通常在运行时启用时客户端(可能是一个Web浏览器)使用Accept-Encoding: gzip, deflate
标题说“gzip对我来说没问题”。见https://en.wikipedia.org/wiki/HTTP_compression
在服务器端,魔术是由HTTP Filter处理,它拦截请求,记下标题,然后将请求发送到应用程序的其余部分,截获响应并相应地压缩。
JBoss有一些内置支持:Enabling gzip compression for Jboss
如果您想自己动手,则需要撰写Filter
并在web.xml
中对其进行配置。
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
if (req instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String ae = request.getHeader("accept-encoding");
if (ae != null && ae.indexOf("gzip") != -1) {
GZIPResponseWrapper wrappedResponse = new GZIPResponseWrapper(response);
chain.doFilter(req, wrappedResponse);
wrappedResponse.finishResponse();
return;
}
chain.doFilter(req, res);
}
}
或者您可以使用WebUtilities等性能优化库来启用此处所述的压缩https://github.com/rpatil26/webutilities/wiki/Enable-Compression
另见:
答案 1 :(得分:1)
在Jboss EAP 7.0中,这对我有用:
编辑:Standalone.xml
<subsystem xmlns="urn:jboss:domain:undertow:1.2"> <!-- SEARCH FOR THIS: urn:jboss:domain:undertow -->
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http"/>
<host name="default-host" alias="localhost">
(...)
<!-- ADD THIS FOR GZIP COMPRESSION -->
<filter-ref name="gzipFilter" predicate="exists['%{o,Content-Type}'] and regex[pattern='(?:application/javascript|text/css|text/html|text/xml|application/json)(;.*)?', value=%{o,Content-Type}, full-match=true]"/>
<!-- /GZIP COMPRESSION -->
</host>
</server>
(...)
<filters>
(...)
<!-- ADD THIS FOR GZIP COMPRESSION -->
<gzip name="gzipFilter"/>
<!-- /GZIP COMPRESSION -->
</filters>
</subsystem>
重新启动服务器