2

我有一个(通过 mod_jk)配置为通过 Apache Httpd 服务器工作的 tomcat 服务器。

Apache Httpd 服务器压缩(通过 mod_deflate)发送到浏览器的所有文本/html。

一些jsp页面是交互式的和长时间运行的,即在执行期间显示进度或日志。如果打开压缩,这些页面上的所有文本都会在页面执行结束时出现。

我希望能够在 JSP 页面中设置一些响应标头,例如

<% response.setHeader("X-Compress", "0"); %>

在 Apache Httpd 中,这必须导致禁用压缩,例如通过设置no-gzip环境变量。

也许还有其他方法?

4

3 回答 3

2

我正在使用 mod_layout 向页面添加标题。当页面通过 mod_jk 来自 tomcat 时会出现问题。它会在 gzip 后的二进制代码之前添加纯文本标头,从而破坏 gz 文件。它的文档似乎很差,但除了压缩问题之外做得很好。

很遗憾,

重写规则。- [E=no-gzip:1]

对我不起作用。

也没有:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

这确实有效:

  1. 启用 mod_headers

  2. 向您的 VirtualHost 添加一行

    RequestHeader 未设置 Accept-Encoding

有关 mod_headers 的更多信息: http ://httpd.apache.org/docs/2.0/mod/mod_headers.html

我的 mod_layout 来自 Ubuntu 的包管理器,但它也在这里:htt p://download.tangent.org/

这是我第一次阅读有关 mod_layout 的页面: http ://www.linuxjournal.com/article/4334

于 2012-01-06T13:03:34.887 回答
0

我认为不可能通过 HTTP 标头,因为此标头仅用于告诉客户端如何表现。但是,您必须告诉 apache。

但可以使用 .htaccess 文件禁用它,如果这是一个选项:

RewriteRule . - [E=no-gzip:1]
于 2010-08-05T11:40:46.010 回答
0

在最近的设置上进行了测试(Apache httpd 2.2.16、Tomcat 6.0.29、mod_jk 1.2.30、tcnative-1.dll)。不存在这样的问题(使用 Apache httpd 2.0.x 可能仍然存在)。

在 jsp 中使用 response.flushBuffer() 或 out.flush() 时,flush 数据包通过 mod_jk 发送到 Apache。这反过来创建了由 deflate 模块接收的 APR 刷新桶,并强制它将压缩缓冲区刷新到浏览器。

所以响应是压缩的和交互式的。

PS 但是,我已经创建了相关的补丁,它对来自应用服务器的 X-nogzip 标头做出反应。设置为 X-nogzip: 1 以禁用压缩。

http://huksley.sdot.ru/wp-content/uploads/2010/09/mod_jk-1.2.30-x-nogzip-patch.zip

于 2010-09-06T12:08:55.897 回答