私が取り組んでいる組み込みデバイスでは、Web ページの 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 が POST ではなく GET を使用している (これはプロジェクトで指定されたものです)
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) php ファイルの出力がローカルの .htaccess ファイルを介して 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) /etc/apache2/httpd.conf ファイルを使用して、php ファイルの出力が gzip 圧縮されないようにする
<Directory /myfolder>
RemoveOutputFilter php
</Directory>
これも、呼び出しの間に apache2 を再起動した場合でも、明らかな効果がないように見えました。
(c) XMLHttpHeader.setHeaderRequest() を使用して、「Accept-Encoding」ヘッダーを「」または「identity」に設定する
両方試してみました
xmlhttp.setRequestHeader("Accept-Encoding", "identity");
...と...
xmlhttp.setRequestHeader("Accept-Encoding", "");
どちらも明らかな効果はないようでした: Firebug はまだ要求ヘッダーが保持されていると報告しています
Accept-Encoding gzip、デフレート
これについて仕様を確認したところ、setRequestHeader() で AcceptEncoding ヘッダー行を変更できるようにする必要があるようで、これは少し奇妙です。おそらく埋められたFFセキュリティホール? http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#dfn-setrequestheader
追加するため、setRequestHeader() メカニズムは明らかに正常に機能していることに注意してください...
xmlhttp.setRequestHeader("X-FavouriteFruit", "バナナ");
...Firebug リクエスト出力に行を追加します。
X-Favouriteフルーツバナナ
基本的に、私はほとんどアイデアがありません。PHP 応答が gzip されるのを止めるにはどうすればよいですか?