Зменшіть сумісність браузера стиснення та переваги перед 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.