0

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 するという事実は問題です。応答がバッファリングされ、チャンク エンコーディングがトリガーされるためです。これは、ブラウザーに進行状況モニターを表示させたい (これらは非常に大きなファイルである可能性がある) ため、望ましくありません。

何か案は?

4

1 に答える 1

-1

代わりに、ファイル拡張子の一致を使用してヘッダーを追加します。

<filesMatch "\.(html)$">
# Header set Content-Encoding x-deflate
# Header set Content-Encoding deflate
# Header set Content-Encoding gzip
</filesMatch>

それぞれを試して、最も効果的なものを選択してください。

于 2013-08-22T00:25:30.943 に答える