Apache mod_deflate not compressing json output

tomfumb picture tomfumb · Jan 25, 2012 · Viewed 9.7k times · Source

I've followed all the steps in multiple tutorials to enable mod_deflate in Apache but I'm still not seeing compression (in Fiddler) when I issue requests for json (via PHP script) to my local web server. Compression isn't necessary for my browser to localhost but my machine will be periodically exposed over a slow VPN so I would like to use it.

from httpd.conf:

LoadModule deflate_module modules/mod_deflate.so (not commented-out)

mod_deflate.so exists in Apache2/modules

PHP scripts immediately set the following header when run: header('Content-Type: application/json');

application/json exists in Apache2/conf/mime.types

And this is the relevant section from httpd.conf on the mime-types that should be compressed:

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>

When I issue a request to the server the request headers include Accept-Encoding: gzip, deflate, but the response comes back uncompressed. I have restarted Apache after every .conf change.

Any suggestions very welcome!

Answer

Alex Howansky picture Alex Howansky · Jan 25, 2012

Wild guess here... maybe add as a new row in the config:

AddOutputFilter DEFLATE php

or add

application/x-httpd-php

to the end of your exising AddOutputFilterByType list.