Red Hat 6.4 上の Tomcat アプリケーションの前に、プロキシとして Apache 2.2.15 インスタンスがあります。クライアントへの特定の (ホワイト リストに登録されたコンテンツ タイプ) 応答を gzip するように Apache インスタンスを構成しようとしています。Apache は mod_jk を使用して Tomcat に接続しています (ただし、mod_proxy を使用する場合も同じ問題が発生するため、私の問題は mod_jk または Tomcat に関連しているとは思いません)。
私はこの非常に単純な mod_deflate 構成を持っています:
AddOutputFilterByType DEFLATE text/html
これにより、text/html
応答が期待どおりに gzip されます。ただし、Tomcat によって生成されたファイル ( content type のスプレッドシートなど) をダウンロードしようとするとapplication/vnd.ms-excel
、それらのファイルも gzip されます。
Tomcat からファイルを直接ダウンロードする場合の応答ヘッダーは次のとおりです。
Cache-Control:max-age=0
Content-Disposition:attachment; filename="file-20130322-104702.xls";
Content-Length:699904
Content-Type:application/vnd.ms-excel
Date:Fri, 22 Mar 2013 08:47:02 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Pragma:public
Server:Apache-Coyote/1.1
Set-Cookie:fileDownloadToken=true; Path=/
そして、これはApache経由でファイルをダウンロードするときです:
Cache-Control:max-age=0
Connection:Keep-Alive
Content-Disposition:attachment; filename="file-20130322-104524.xls";
Content-Encoding:gzip
Content-Type:application/vnd.ms-excel
Date:Fri, 22 Mar 2013 08:45:24 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Keep-Alive:timeout=30, max=100
Pragma:public
Server:Apache-Coyote/1.1
Set-Cookie:fileDownloadToken=true; Path=/
Transfer-Encoding:chunked
Vary:Accept-Encoding
mod_deflate がこの応答 (上記) を gzip する理由がわかりません。
行をコメントアウトした後AddOutputFilterByType DEFLATE text/html
、ファイルはもはやgzipされていないので、mod_deflateをトリガーしているのはその行であると確信しています. content-type および場合によってはその他のファイルのダウンロードでも、同じ問題が発生しますapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
。ただし、Tomcat から (Apache 経由で) JavaScript ファイルをダウンロードすると、gzip されません (コンテンツ タイプがルールに一致しないため、予想どおり)。
Accept-Ranges:bytes
Cache-Control:PUBLIC, max-age=28800, must-revalidate
Connection:Keep-Alive
Content-Length:5578
Content-Type:application/javascript
Date:Fri, 22 Mar 2013 09:09:35 GMT
ETag:W/"5578-1362994418000"
Expires:Fri, 22 Mar 2013 17:09:35 GMT
Keep-Alive:timeout=30, max=100
Last-Modified:Mon, 11 Mar 2013 09:33:38 GMT
Server:Apache-Coyote/1.1
mod_deflate がこれらのスプレッドシートを gzip するという事実は問題です。応答がバッファリングされ、チャンク エンコーディングがトリガーされるためです。これは、ブラウザーに進行状況モニターを表示させたい (これらは非常に大きなファイルである可能性がある) ため、望ましくありません。
何か案は?