php - 如何在 Apache2 下禁用 PHP AJAX 请求/响应的 gzip 压缩?

标签 php javascript firefox xmlhttprequest gzip

在我正在使用的嵌入式设备上,网页的 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,请求 header 如下所示:

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

响应 header 通常如下所示:-

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 文件的输出进行 gzip 压缩

<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) 防止 php 文件的输出通过/etc/apache2/httpd.conf 文件进行 gzip 压缩

<Directory /myfolder>
      RemoveOutputFilter php
</Directory>

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

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

我都尝试过

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

...还有...

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

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

接受编码 gzip、deflate

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

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

xmlhttp.setRequestHeader("X-FavouriteFruit", "香蕉");

...向 Firebug 请求输出添加一行:

X-最爱水果香蕉

基本上,我已经没有主意了。我还能如何阻止我的 php 响应被 gzip 压缩?

最佳答案

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

zlib.output_compression = Off

在语言选项部分。

关于php - 如何在 Apache2 下禁用 PHP AJAX 请求/响应的 gzip 压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15385361/

相关文章:

php - 使用 PHP 和验证码减少垃圾邮件的最佳实践是什么?

javascript - 如何从infowindow获取<a href ='callto:' +phone+'>到mysql

php - 在没有任何 HTML 呈现的情况下显示页面

javascript - 正则表达式或 javascript 每 X 个连续单词中有 1 个单词

php - 如何在不损失性能/良好设计的情况下构建完全可定制的应用程序(又名数据库)?

javascript - JS数组键动态

php - 如何制作正则表达式以使用 php 从以下代码中抓取复杂数组

html - Bootstrap 下拉菜单插入符号在 Firefox 中不显示

javascript - 为什么 Firefox 配置文件文件夹中没有 webappsstore.sqlite 文件?

java - 如何使用 GeckoDriver Firefox 和 Selenium 下载文件?