Personally, I do not like the way Drupal handles output compression; I take care of this outside of Drupal. On the Drupal site, I add $conf['page_compression'] = FALSE; $conf['css_gzip_compression'] = FALSE; $conf['js_gzip_compression'] = FALSE; to settings.php, and this to a custom module to show that this is disabled: /** * Implements hook_form_FORM_ID_alter(). */ function MYMODULE_form_system_performance_settings_alter(&$form, $form_state) { $form['bandwidth_optimization']['page_compression']['#default_value'] = 0; $form['bandwidth_optimization']['page_compression']['#disabled'] = TRUE; $form['bandwidth_optimization']['page_compression']['#description'] = t('Handled by Apache.'); } This is to also prevent accidental double output compression, which can be very hard to diagnose if you don't know about the symptoms. Then, in my Apache config, I do <IfModule mod_deflate.c> # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/1 2/pushing-beyond-gzipping/ <IfModule mod_setenvif.c> <IfModule mod_headers.c> SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gz ip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encodi ng </IfModule> </IfModule> # HTML, TXT, CSS, JavaScript, JSON, XML, HTC: <IfModule filter_module> FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-font object FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no </IfModule> <IfModule !mod_filter.c> # Legacy versions of Apache AddOutputFilterByType DEFLATE text/html text/plain text/css application/json AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE text/xml application/xml text/x-component AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml appl ication/atom+xml AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms- fontobject application/x-font-ttf font/opentype </IfModule> </IfModule> This lets Apache do the output compression by MIME type, and also make sure all text based output gets compressed. This is adapted from an older version of the HTML5 Boilerplate project's .htaccess file, which now lives in a [separate project][1]. I also add in their directives for cache control, and a few other things. I keep all of this in an individual file, that I then `Include` in my virtual hosts. The downside of this is that the server compresses each request, but it works well for my sites and my clients. [1]: https://github.com/h5bp/server-configs-apache