【问题标题】:How to enable the Gzip compression in jBoss EAP server如何在 jBoss EAP 服务器中启用 Gzip 压缩
【发布时间】:2015-06-01 06:32:48
【问题描述】:

我正在使用 jBoss EAP 6.1 服务器,我想在其中为我的 HTML、CSS 和 javaScript 文件启用 GZIP 压缩。

我对这种压缩技术完全陌生,谁能给我推荐一个教程或者可以直接给我一个逐步的过程来在 Jboss EAP 6.1 服务器上启用压缩。

除此之外我还有以下疑惑:

1) 我是否需要压缩工作空间中的文件,或者如果我的 jboss 服务器将启用压缩,它将负责压缩,我只需要部署战争。

2) 当服务器响应我的请求时,我是否需要显式转换或解码或解压缩文件以使用它们或解释它们?

【问题讨论】:

    标签: jboss compression jboss-eap-6 http-compression


    【解决方案1】:

    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中。

    Java2s has an implementation:

      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

    另见:

    【讨论】:

    • 你好@Aaron Digulla 我已经在我的 jBoss EAP 6.1 上实现了这段代码,当我在本地服务器上工作时它运行良好。但是当我转移到实际的服务器环境时,这些变化并没有得到反映。我的服务器是 jBoss Server EAP 6.1,在 Linux 操作系统上运行。请参考我的新问题。 stackoverflow.com/questions/30588454/…
    【解决方案2】:

    在 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>
    

    重启服务器

    【讨论】:

    • 值得注意的是,在更高版本的 JBoss 方括号中会导致警告:Predicate not min-content-size[2048] uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)。我看到这个替代谓词的效果很好,它捕获了许多类型的文本内容类型:predicate="exists('%{o,Content-Type}') and regex(pattern='(?:text|javascript|json|html|multipart|xml)',value=%{o,Content-Type},full-match=false)"
    猜你喜欢
    • 2011-10-23
    • 2011-02-28
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2013-02-24
    • 2021-03-13
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多