Зменшіть сумісність браузера стиснення та переваги перед GZIP


91

ОНОВЛЕННЯ 10 лютого 2012 року:

zOompf завершив деякі дуже ретельні дослідження з цієї самої теми тут . Це перевершує будь-які висновки нижче.


ОНОВИТИ 11 вересня 2010 року:

Для цього тут створена тестова платформа




Визначення HTTP 1.1 для GZIP та DEFLATE (zlib) для деякої довідкової інформації:

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

Отже, моє запитання: якщо я надсилаю RAW дані про дефляцію без обгортки zlib (або gzip, з цього приводу), чи існують сучасні браузери (наприклад, IE6 і новіші версії, FF, Chrome, Safari тощо), які НЕ можуть зрозуміти необроблену дефляцію стиснуті дані (припускаючи, що заголовок HTTP-запиту "Accept-Encoding" містить "deflate")?

Дані дефляції ЗАВЖДИ будуть на кілька байт менше, ніж GZIP.

Якщо всі ці браузери можуть успішно декодувати дані, які недоліки можуть бути при надсиланні RAW-дефляту замість zlib?



ОНОВИТИ 11 вересня 2010 року:

Для цього тут створена тестова платформа


1
Не могли б ви розширити питання про те, чому System.IO.Compression.DeflateStream відстій у порівнянні з zlib.net? Google не показує мені багато важливого, за винятком того, що одна людина згадує про це "не має особливо хорошого ступеня стиснення".
Джоел Мюллер,

Правильно, коефіцієнт стиснення як для методів gzip, так і для дефляції .net, здається, не наближається до того, яким він повинен бути. Однак я не робив жодного тесту швидкості між ними (zlib.net проти рідного .net).
Девід Мердок,

Чому б вам просто не записати результати свого тесту?
Гамбо

1
Я тикався в бібліотеці System.IO.Compression, і, схоже, використовує статичне / заздалегідь визначене дерево - отже, стиснення не оптимізовано для конкретного потоку. Це повинен бути найшвидший метод, але, безумовно, дасть погані коефіцієнти стиснення.
Brady Moritz

2
@JoelMueller Це могло б пояснити: virtualdub.org/blog/pivot/entry.php?id=335
Nayuki

Відповіді:


37

ОНОВЛЕННЯ: Браузери припиняють підтримку необробленого спуску. 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". Здувати заборонено.


Я прийшов до висновку, що ми завжди можемо надіслати необроблений DEFLATE (коли заголовок запиту HTTP "Accept-Encoding" містить "deflate"), і браузер зможе правильно інтерпретувати закодовані дані. Хтось може довести це неправильно?

Примітка: Власна реалізація .NET DEFLATE (System.IO.Compression.DeflateStream) є необробленою DEFLATE. Це теж відстій. Будь ласка, використовуйте zlib.net для всіх ваших потреб .NET дефляції.


1
Чи можете ви більш конкретно використовувати zlib.net для дефляції? Як це відповідає наведеній вище діаграмі, де сказано, що raw deflate працює, але zlib не працює у деяких випадках XP IE?
David Eison

Android підтримує дефляційне стиснення з API 9. див.: Developer.android.com/reference/java/util/zip/… для отримання додаткової інформації
Стюарт Блеклер

1
@DavidMurdoch єдиний розумний результат ваших тестів, здається, ніколи не використовує дефляцію , vervestudios.co/projects/compression-tests/results. Я думаю, що цю відповідь слід відредагувати, щоб відображати це
Сем Саффрон

Так, я згоден. Оновлення зараз.
Девід Мердок


1

Хіба це не так, що AddOutputFilterByType DEFLATEвикористання mod_deflate надсилає gzip за замовчуванням?


1
Гей, Поле, я відчуваю, ніби розмовляю зі знаменитістю ... ти скрізь. :-) У будь-якому випадку, AddOutputFilertByType DEFLATEgzips відповідає замість того , щоб дефлювати її за замовчуванням (наскільки мені відомо). Gzipце deflate+ 10-байтовий верхній колонтитул + 8-байтовий нижній колонтитул - це означає, що GzipЗАВЖДИ буде більше, ніж deflate... так чому ми повинні коли-небудь використовувати gzip? (див. en.wikipedia.org/wiki/Gzip#File_format, щоб дізнатися про те, з чого створений gzip). З огляду на це, я не впевнений, як налаштувати deflateнайкращий метод стиснення в Apache.
Девід Мердок,

-1

наскільки я знаю, так - майже в цілому ви "завжди можете надіслати необроблений DEFLATE, і все було б нормально" ... існує не "завжди", але більшість випадків. якщо ні, це проблема браузера.


Я намагаюся виявити випадки, коли здуття сировини не вдається. Відповідно до специфікації, він повинен вийти з ладу у всіх браузерах.
Девід Мердок,

RAW deflate(тобто не zlib , взагалі немає заголовків) працюватиме в IE7 лише тоді, коли encoding:gzipі (лише перевірено в chrome v24) encoding:deflateв chrome .
Scotty.NET
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.