Совместимость и преимущества браузера с дефлятом сжатия для GZIP


ОБНОВЛЕНИЕ 10.02.2012:

zOompf завершил некоторые очень тщательные исследования по этой теме здесь. Он превосходит любые выводы ниже.


ОБНОВЛЕНИЕ 11 сентября 2010 года:

Для этого создана тестовая платформа




HTTP 1.1 определения GZIP и DEFLATE (zlib) для некоторой исходной информации:

"Gzip" - это формат gzip, а "deflate" - это формат zlib. вероятно, должен был назвать второй "zlib", чтобы избежать путаница с сжатым форматом данных с дефлятом. Хотя HTTP 1.1 RFC 2616 правильно указывает на спецификацию zlib в RFC 1950 для кодирования передачи с дефлятом были сообщения о серверах и браузерах, которые неправильно производят или ожидают отработки данные по спецификации дефляции в RFC 1951, в первую очередь Продукты Microsoft. Таким образом, даже если кодирование "дефлировать" передается с использованием Формат zlib был бы более эффективным (и на самом деле точно формат zlib для), используя передачу "gzip" кодирование, вероятно, более надежное из-за неудачного выбора имя со стороны авторов HTTP 1.1. "(источник: http://www.gzip.org/zlib/zlib_faq.html)

Итак, мой вопрос: если я отправлю RAW дефляцию данных с помощью NO zlib wrapper (или gzip, если на то пошло) существуют ли какие-либо современные браузеры (например, IE6 и выше, FF, Chrome, Safari и т.д.), Которые НЕ могут понять сырую дефляцию сжатые данные (при условии, что заголовок HTTP-запроса "Accept-Encoding" содержит "deflate" )?

Данные дефлирования будут ВСЕГДА быть на несколько байтов меньше, чем GZIP.

Если все эти браузеры могут успешно декодировать данные, что недостатки там, чтобы отправить RAW deflate вместо zlib?



ОБНОВЛЕНИЕ 11 сентября 2010 года:

Для этого создана тестовая платформа

Ответ 1

ОБНОВЛЕНИЕ: Браузеры отказываются от поддержки сырой дефляции. zOompf завершил некоторые очень тщательные исследования по этой теме здесь. К сожалению, кажется, что сырой дефлат НЕ безопасен в использовании.


Чтобы узнать больше результатов, http://www.vervestudios.co/projects/compression-tests/results

Вот те браузеры, которые были протестированы:

/*  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 отправляет заголовок HTTP-запроса "Accept-Encoding: gzip". Дефляция не разрешена.


Я заключаю, что мы можем всегда отправлять raw DEFLATE (когда заголовок HTTP-запроса "Accept-Encoding" содержит "deflate" ), и браузер сможет правильно интерпретировать закодированные данные. Может кто-то доказать это неправильно?

Примечание: встроенная реализация .NET из DEFLATE (System.IO.Compression.DeflateStream) является сырой DEFLATE. Это также отстой. Пожалуйста, используйте zlib.net для всех ваших потребностей в дефляции .NET.

Ответ 2

В браузере Android 1.6 (v4) не выполняется тест zlib и deflate на вашей странице. Я добавил его в свой список.

Ответ 3

Не так ли, что AddOutputFilterByType DEFLATE с помощью отправки mod_deflate по gzip по умолчанию?

Ответ 4

насколько я знаю, да - в значительной степени вы "всегда можете отправить сырое DEFLATE, и все будет хорошо"... нет "всегда", но больше всего случаев. если нет, это проблема браузера.