Apache mod_deflate 不压缩 json 输出

Posted

技术标签:

【中文标题】Apache mod_deflate 不压缩 json 输出【英文标题】:Apache mod_deflate not compressing json output 【发布时间】:2012-02-19 00:55:29 【问题描述】:

我已按照多个教程中的所有步骤在 Apache 中启用 mod_deflate,但是当我向本地 Web 服务器发出 json 请求(通过 php 脚本)时,我仍然没有看到压缩(在 Fiddler 中)。我的浏览器不需要压缩到本地主机,但我的机器会定期通过慢速 *** 暴露,所以我想使用它。

来自 httpd.conf:

LoadModule deflate_module modules/mod_deflate.so(未注释掉)

mod_deflate.so 存在于 Apache2/modules 中

PHP 脚本在运行时立即设置以下标头:header('Content-Type: application/json');

application/json 存在于 Apache2/conf/mime.types 中

这是 httpd.conf 中有关应压缩的 mime 类型的相关部分:

Alias /mapguide "C:/Program Files/OSGeo/MapGuide/Web/www/"
<Directory "C:/Program Files/OSGeo/MapGuide/Web/www/">
  AllowOverride All
  Options All -Indexes
  Order allow,deny
  Allow from all

...

  # Content compression
  AddType text/javascript js jgz
  AddOutputFilterByType DEFLATE text/javascript application/json text/html

  RewriteEngine on
  RewriteRule .* - [E=REMOTE_USER:%HTTP:Authorization,L]
</Directory>

当我向服务器发出请求时,请求标头包括 Accept-Encoding: gzip, deflate,但返回的响应未压缩。每次更改 .conf 后,我都会重新启动 Apache。

欢迎提出任何建议!

【问题讨论】:

【参考方案1】:

在这里猜测一下......可能会在配置中添加一个新行:

AddOutputFilter DEFLATE php

或添加

application/x-httpd-php

到现有 AddOutputFilterByType 列表的末尾。

【讨论】:

您能否确认它已成功压缩其他内容,例如静态页面? 这个非常好的问题让我意识到我是个白痴 - 在我做出您建议的更改之前,我已将 Fiddler 设置为自动解码所有响应,因此它始终显示未压缩。你的答案的改变解决了这个问题。

以上是关于Apache mod_deflate 不压缩 json 输出的主要内容,如果未能解决你的问题,请参考以下文章

Apache-gzip压缩-mod_deflate

在禁用 mod_deflate 和 mod_gzip 的情况下压缩 HTML、CSS 和 JS 的最佳方法

apache_conf .htaccess mod_deflate gZip压缩

Apache 优化与安全

Web服务------Apache网页优化

Apache网页优化