mod_deflate与IBM WebSphere和IBM IHS

时间:2015-12-08 12:18:37

标签: java apache http websphere mod-deflate

我正在尝试为作为部署到WebSphere v7的Web应用程序的一部分捆绑的css,js和html资源启用响应压缩。所有HTTP流量都路由到位于WebSphere实例前面的IBM IHS HTTP服务器。

我创建了一个 mod_deflate.conf 文件并将其导入 httpd.conf 文件。内容如下:

LoadModule deflate_module modules/mod_deflate.so

DeflateCompressionLevel 3

# Compress all content, manually excluding specified file types 
<IfModule mod_deflate.c>   
    # place filter 'DEFLATE' on all outgoing content       
    SetOutputFilter DEFLATE   
    # exclude uncompressible content via file type   
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|rar|zip)$ no-gzip   
    <IfModule mod_headers.c>
        # properly handle requests coming from behind proxies
        Header append Vary User-Agent   
    </IfModule> 
</IfModule>

# deflate.log, log compression ratio on each request 
<IfModule mod_deflate.c>
    DeflateFilterNote Input instream
    DeflateFilterNote Output outstream
    DeflateFilterNote Ratio ratio
    LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
    CustomLog logs/deflate.log deflate
</IfModule>

# Properly handle old browsers that do not support compression
<IfModule mod_deflate.c>
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

当我查看HTTP流量时,我看到请求指定gzip / deflate编码是可接受的:

Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Accept-Encoding:"gzip, deflate" 

但是,响应没有被压缩(没有返回与gzip / deflate相关的头文件):

Content-Type:"text/html; charset=UTF-8"
Vary:"User-Agent"
Server:"IBM_HTTP_Server"

此外,deflate.log不会显示任何压缩:

"GET /webapp/css/style.css HTTP/1.1" -/- (-%)
"GET /webapp/js/jquery/jquery.ui.draggable.min.js HTTP/1.1" -/- (-%)
"POST /webapp/markup/Basic.xhtml HTTP/1.1" -/- (-%)

正在发回 Vary 响应标头,因此它肯定会触及声明SetOutputFilter的配置块。

我在这里缺少什么 - 根据过滤器/内容类型/资源名称匹配,是不是即时压缩的内容?在上面的例子中,所有与正则表达式。(?:gif | jpe?g | png | rar | zip)$ no-gzip 不匹配的内容都应该被压缩,不是吗?

3 个答案:

答案 0 :(得分:1)

通过数字播放这个 - 您查看了客户端的原始HTTP标头,而不是WebSeal发布的hedaers,WebSeal决定剥离Accept-Encoding,因此它不必担心多个变体相同的资源。

剥离可能是以一些模糊的webseal方式配置的。

答案 1 :(得分:0)

1. Uncomment
LoadModule deflate_module modules/mod_deflate.so
2. Add 
<IfModule mod_deflate.c>
    <Location / > <!-- you can specify your app URL also-->
        # Space separated mime types.
        AddOutputFilterByType DEFLATE text/html text/plain application/json 
    </Location>
</IfModule>

答案 2 :(得分:0)

好的,我终于能够解决根本原因了。我们通过IBM WebSeal前端代理访问Web应用程序。

当我绕过WebSeal并直接访问应用程序时,返回了以下HTTP响应头:

Content-Encoding:"gzip"

所以,现在我必须解决为什么要在回到客户端之前解压缩内容。