【问题标题】:How can I disable gzip compression for a PHP AJAX request/response under Apache2?如何在 Apache2 下禁用 PHP AJAX 请求/响应的 gzip 压缩?
【发布时间】:2013-03-01 09:22:29
【问题描述】:

在我正在开发的嵌入式设备上,网页的 Javascript 向本地 PHP 文件发送请求,然后使用响应动态更新 DOM 元素。一切正常:AJAX 很酷。

不过,令人讨厌的是,所有响应都是 gzip 编码的,尽管我不希望它们不是(目标设备的处理器没有太多的处理带宽)。问题是我看不到如何禁用 gzip 压缩响应。

请注意: (1) 在服务器端,我在Ubuntu下使用PHP 5.3.10和Apache/2.2.22进行测试

(2) 在客户端,我使用的是 Firefox 19.0 和 Firebug

(3) PHP 文件只是在回显它们的输出,即我认为它们没有调用 ob_gzhandler()

(4) JavaScript 使用 GET 而不是 POST(这是为项目指定的)

根据 Firebug,请求标头看起来像这样:

Accept      text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Cookie     PHPSESSID=<whatever>
Host    10.0.2.15
Referer http://10.0.2.15/pages/status.php
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0

响应头通常如下所示:-

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection     Keep-Alive
Content-Encoding    gzip
Content-Length  59
Content-Type    text/html
Date    Wed, 13 Mar 2013 12:08:02 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive      timeout=5, max=43
Pragma   no-cache
Server   Apache/2.2.22 (Ubuntu)
Vary    Accept-Encoding
X-Powered-By    PHP/5.3.10-1ubuntu3.5

我已经尝试过的方法(但没有任何成功):-

(a) 防止通过本地 .htaccess 文件压缩 php 文件的输出

<IfModule mod_env.c>
SetEnvIfNoCase Request_URI "\.php$" no-gzip dont-vary
</IfModule>

这与http://support.modwest.com/content/1/117/en/how-do-i-turn-off-webservers_-gzip-compression.html 一致,但似乎没有任何效果,即使我在两次调用之间重新启动了 apache2。

(b) 防止通过 /etc/apache2/httpd.conf 文件压缩 php 文件的输出

<Directory /myfolder>
      RemoveOutputFilter php
</Directory>

这似乎也没有任何明显的效果,即使我在两次调用之间重新启动了 apache2。

(c) 使用 XMLHttpHeader.setHeaderRequest() 将“Accept-Encoding”标头设置为“”或“identity”

我都试过了

xmlhttp.setRequestHeader("Accept-Encoding", "identity");

...和...

xmlhttp.setRequestHeader("Accept-Encoding", "");

似乎都没有任何明显的效果:Firebug 仍然报告请求标头保留

接受编码 gzip,放气

我检查了这个规范,似乎应该允许 setRequestHeader() 更改 AcceptEncoding 标题行,所以这有点奇怪。可能是一个已被填补的 FF 安全漏洞? http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#dfn-setrequestheader

请注意,setRequestHeader() 机制显然工作正常,因为添加...

xmlhttp.setRequestHeader("X-FavouriteFruit", "banana");

...在 Firebug 请求输出中添加一行:

X-FavouriteFruit 香蕉

基本上,我几乎没有想法。我还能如何阻止我的 php 响应被压缩?

【问题讨论】:

  • 您应该在 AJAX 请求 中指定是否接受 gz 传输编码作为响应。通常 apache 和 php 都反映了这种愿望。 - 如果这是不可能的,你可以传递一个查询变量,然后让 apache 改变​​它的行为(和/或删除请求标头,以便 PHP 不认为它也应该压缩)。
  • 你是否建议我使用 setRequestHeader() 添加我自己的(比如)“X-Custom-Action”标头,然后在 Apache 注意到 X-Custom-Action 标头时修改其行为应要求?

标签: php javascript firefox xmlhttprequest gzip


【解决方案1】:

您似乎在设备上使用 apache 来提供 PHP 文件,这意味着您可以在 /etc/php.ini 中尝试类似的操作(或通过 @php_value 在 .htaccess 中)

zlib.output_compression = Off

在语言选项部分。

【讨论】:

  • 我刚刚检查了我的 /etc/php5/apache2/php.ini 文件,它已经有“zlib.output_compression = Off”,所以这可能不是这里的问题。跨度>
  • 您可以使用 ini_set(); 从单个 php 文件中获得相同的效果;可能是?喜欢:
猜你喜欢
  • 2017-09-20
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2015-08-06
  • 2017-05-01
  • 2011-03-20
  • 1970-01-01
相关资源
最近更新 更多