Deflate compression browser compatibility and advantages over GZIP
Solution 1
UPDATE: Browsers have been dropping support for raw deflate. zOompf has completed some very thorough research on this very topic here. Unfortunately, it appears that raw deflate is NOT safe to use.
Check http://www.vervestudios.co/projects/compression-tests/results for more results.
Here are the browsers that have been tested:
/* Browser DEFLATE ZLIB */
XP Internet Explorer 6 PASS FAIL
XP Internet Explorer 7 PASS FAIL
XP Internet Explorer 8 PASS FAIL
Vista Internet Explorer 8 PASS FAIL
XP Firefox 3.6.* PASS PASS
XP Firefox 3.5.3 PASS PASS
XP Firefox 3.0.14 PASS PASS
Win 7 Firefox 3.6.* PASS PASS
Vista Firefox 3.6.* PASS PASS
Vista Firefox 3.5.3 PASS PASS
XP Safari 3 PASS PASS
XP Safari 4 PASS PASS
XP Chrome 3.0.195.27 PASS PASS
XP Opera 9 PASS PASS
XP Opera 10 PASS PASS
XP Sea Monkey 1.1.8 PASS PASS
Android 1.6 Browser (v4)* N/A N/A
OS-X Safari 4 PASS PASS
OS X Chrome 7.0.517.44 PASS PASS
OS X Opera 10.63 PASS PASS
iPhone 3.1 Safari PASS PASS
* Android Sends HTTP request header "Accept-Encoding: gzip". Deflate is not permitted.
I conclude that we can always send raw DEFLATE (when the HTTP request header "Accept-Encoding" contains "deflate") and the browser will be able to correctly interpret the encoded data. Can someone prove this wrong?
note: .NET's native implementation of DEFLATE (System.IO.Compression.DeflateStream) is raw DEFLATE. It also sucks. Please use zlib.net for all of your .NET deflating needs.
Solution 2
The Android 1.6 browser (v4) fails both the zlib and the deflate test on your page. I've added it to your list.
Solution 3
Isn't it the case that AddOutputFilterByType DEFLATE
using mod_deflate sends by gzip by default?
David Murdoch
I'm an Ethereum enthusiast and Software Development Lead at Truffle. I'm the core contributor to Ganache. I'm a husband, father of 2, have 6 siblings, enjoying traveling, and can solve a Rubik's Cube in under 2 minutes. I play bass, guitar, piano, and a little drums. I'm a terrible singer. I drive a 90's M3 because I enjoy fixing things.
Updated on May 19, 2020Comments
-
David Murdoch almost 4 years
UPDATE Feb 10 2012:
zOompf has completed some very thorough research on this very topic here. It trumps any findings below.
UPDATE Sept 11 2010:
A testing platform has been created for this here
HTTP 1.1 definitions of GZIP and DEFLATE (zlib) for some background information:" 'Gzip' is the gzip format, and 'deflate' is the zlib format. They should probably have called the second one 'zlib' instead to avoid confusion with the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 correctly points to the zlib specification in RFC 1950 for the 'deflate' transfer encoding, there have been reports of servers and browsers that incorrectly produce or expect raw deflate data per the deflate specification in RFC 1951, most notably Microsoft products. So even though the 'deflate' transfer encoding using the zlib format would be the more efficient approach (and in fact exactly what the zlib format was designed for), using the 'gzip' transfer encoding is probably more reliable due to an unfortunate choice of name on the part of the HTTP 1.1 authors." (source: http://www.gzip.org/zlib/zlib_faq.html)
So, my question: if I send RAW deflate data with NO zlib wrapper (or gzip, for that matter) are there any modern browsers (e.g., IE6 and up, FF, Chrome, Safari, etc) that can NOT understand the raw deflate compressed data (assuming HTTP request header "Accept-Encoding" contains "deflate")?
Deflate data will ALWAYS be a few bytes smaller than GZIP.
If all these browsers can successfully decode the data, what downsides are there to sending RAW deflate instead of zlib?
UPDATE Sept 11 2010:
A testing platform has been created for this here
-
David Murdoch over 14 yearsThanks! What Content-Encoding does Android's browser send?
-
Josef Pfleger over 14 yearsIt sends 'Accept-Encoding: gzip'.
-
David Murdoch about 14 yearsI'm trying to find the cases when raw deflate fails. According to spec it should fail in all browsers.
-
David Murdoch over 13 yearsHey Paul, I feel like I'm talking to a celebrity...you are everywhere. :-) Anyway,
AddOutputFilertByType DEFLATE
gzips the response instead of deflating it by default (as far as I know).Gzip
isdeflate
+ a 10 byte header + 8 byte footer - which means thatGzip
will ALWAYS be larger thandeflate
...so why should we ever use gzip? (see en.wikipedia.org/wiki/Gzip#File_format for a breakdown of what gzip is made of). With that said, I'm not sure how to go about settingdeflate
as the preferred compression method in Apache. -
Arifa Raj almost 13 yearsCan you be more specific on using zlib.net for deflating? How does that match the above chart, where it says raw deflate works but zlib doesn't in some XP IE cases?
-
Stuart Blackler over 12 yearsAndroid supports deflate compression since API 9. see: developer.android.com/reference/java/util/zip/… for more information
-
Sam Saffron about 12 years@DavidMurdoch the only sane result from your tests seems to never use deflate, vervestudios.co/projects/compression-tests/results I think this answer should be edited to reflect that
-
Scotty.NET about 11 yearsRaw
deflate
(i.e. not zlib, no headers at all) will only work in IE7 ifencoding:gzip
and (only tested in chrome v24)encoding:deflate
in chrome.