Sıkıştırma tarayıcısı uyumluluğunu ve GZIP'ye göre avantajları boşaltın


91

GÜNCELLEME Şubat 10 2012:

zOompf burada bu konu hakkında çok kapsamlı bir araştırma yaptı . Aşağıdaki bulgulardan üstündür.


GÜNCELLEME 11 Eylül 2010:

Bunun için burada bir test platformu oluşturulmuştur




Bazı arka plan bilgileri için GZIP ve DEFLATE (zlib) HTTP 1.1 tanımları:

"'Gzip' gzip formatıdır ve 'deflate' zlib formatıdır . Ham deflate sıkıştırılmış veri formatıyla karışıklığı önlemek için muhtemelen ikincisini 'zlib' olarak adlandırmaları gerekirdi. HTTP 1.1 RFC 2616 doğru bir şekilde işaret ederken 'deflate' aktarım kodlaması için RFC 1950'deki zlib spesifikasyonu, özellikle Microsoft ürünleri olmak üzere RFC 1951'deki deflate spesifikasyonuna göre ham deflate verilerini hatalı şekilde üreten veya bekleyen sunucular ve tarayıcılarla ilgili raporlar olmuştur . zlib biçimini kullanarak aktarım kodlaması daha verimli bir yaklaşım olacaktır ( ve aslında zlib biçiminin tam olarak ne için tasarlandığı)), HTTP 1.1 yazarlarının talihsiz bir ad seçimi nedeniyle 'gzip' aktarım kodlamasını kullanmak muhtemelen daha güvenilirdir. "(kaynak: http://www.gzip.org/zlib/zlib_faq.html )

Öyleyse, sorum: RAW söndürme verisini NO zlib sarmalayıcısı (veya bu konuda gzip) gönderirsem, ham söndürmeyi ANLAYAMAYAN modern tarayıcılar (örneğin, IE6 ve üstü, FF, Chrome, Safari vb.) Var mı? sıkıştırılmış veriler (HTTP istek başlığının "Accept-Encoding" "deflate" içerdiğini varsayarsak)?

Söndürme verileri DAİMA GZIP'den birkaç bayt daha küçük olacaktır.

Tüm bu tarayıcılar veriyi başarılı bir şekilde çözebilirse, zlib yerine RAW deflate göndermenin dezavantajları nelerdir?



GÜNCELLEME 11 Eylül 2010:

Bunun için burada bir test platformu oluşturulmuştur


1
System.IO.Compression.DeflateStream'in zlib.net'e kıyasla neden berbat olduğunu açıklar mısınız? Google, "özellikle iyi bir sıkıştırma oranına sahip olmayan" bir kişinin bahsetmesi dışında bana alakalı pek bir şey göstermiyor.
Joel Mueller

Doğru, hem .net'in gzip hem de deflate yöntemleri için sıkıştırma oranı, olması gerekenin yakınında görünmüyor. Ancak, ikisi arasında herhangi bir hız testi yapmadım (zlib.net'e karşı yerel .net).
David Murdoch

Neden test durumunuzun sonuçlarını kaydetmiyorsunuz?
Gumbo

1
System.IO.Compression kitaplığında dolaşıyorum ve statik / önceden tanımlanmış bir ağaç kullanıyor gibi görünüyor - bu nedenle sıkıştırma belirli akış için optimize edilmedi. En hızlı yöntem olmalı, ancak kesinlikle düşük sıkıştırma oranları verecektir.
Brady Moritz

2
@JoelMueller Bunu açıklayabilir: virtualdub.org/blog/pivot/entry.php?id=335
Nayuki

Yanıtlar:


37

GÜNCELLEME: Tarayıcılar ham söndürme desteğini bırakıyor. zOompf burada bu konu hakkında çok kapsamlı bir araştırma yaptı . Ne yazık ki, ham söndürmenin kullanımı güvenli DEĞİL.


Daha fazla sonuç için http://www.vervestudios.co/projects/compression-tests/results adresini kontrol edin .

İşte test edilmiş tarayıcılar:

/*  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 "Accept-Encoding: gzip" HTTP istek başlığını gönderir. Söndürmeye izin verilmez.


Her zaman ham DEFLATE (HTTP istek başlığı "Accept-Encoding" "deflate" içerdiğinde) gönderebileceğimiz ve tarayıcının kodlanmış verileri doğru şekilde yorumlayabileceği sonucuna vardım . Birisi bunun yanlış olduğunu kanıtlayabilir mi?

not: .NET'in DEFLATE (System.IO.Compression.DeflateStream) yerel uygulaması ham DEFLATE'dir. Aynı zamanda berbat. Lütfen tüm .NET deflating ihtiyaçlarınız için zlib.net'i kullanın .


1
Söndürmek için zlib.net'i kullanma konusunda daha spesifik olabilir misiniz? Bu, ham söndürmenin çalıştığını söylediği ancak bazı XP IE durumlarında zlib'in çalışmadığı yukarıdaki grafikle nasıl eşleşiyor?
David Eison

Android, API 9'dan beri deflate sıkıştırmasını desteklemektedir . Daha fazla bilgi için bkz .: developer.android.com/reference/java/util/zip/…
Stuart Blackler

1
@DavidMurdoch, testlerinizin tek mantıklı sonucu deflate kullanmıyor gibi görünüyor , vervestudios.co/projects/compression-tests/results Bence bu yanıt bunu yansıtacak şekilde düzenlenmeli
Sam Saffron

Evet, katılıyorum. Şimdi güncelleniyor.
David Murdoch

6

Android 1.6 tarayıcısı (v4), sayfanızdaki hem zlib hem de söndürme testini geçemiyor. Onu listenize ekledim.


Teşekkürler! Android tarayıcısı hangi İçerik Kodlamasını gönderiyor?
David Murdoch

'Accept-Encoding: gzip' gönderir.
Josef Pfleger

1

AddOutputFilterByType DEFLATEMod_deflate'in varsayılan olarak gzip ile gönderilmesi durum değil mi?


1
Hey Paul, bir ünlüyle konuşuyormuşum gibi hissediyorum ... her yerdesin. :-) Neyse, AddOutputFilertByType DEFLATEyanıtı varsayılan olarak söndürmek yerine gzip'liyor (bildiğim kadarıyla). Gzipolduğu deflateanlamına gelir - 10 byte başlık + 8 bayt altbilginizi + GzipHER ZAMAN daha büyük olacak deflate... o zaman neden biz hiç gzip kullanmalıyım? ( gzip'in neyden yapıldığının dökümü için en.wikipedia.org/wiki/Gzip#File_format adresine bakın ). Bununla birlikte, deflateApache'de tercih edilen sıkıştırma yöntemi olarak nasıl ayarlanacağından emin değilim .
David Murdoch

-1

Bildiğim kadarıyla, evet - hemen hemen "her zaman ham DEFLATE gönderebilir ve her şey yoluna girebilir" ... "her zaman" değil, çoğu durumda. değilse, bu tarayıcının sorunudur.


Ham söndürmenin başarısız olduğu durumları bulmaya çalışıyorum. Spesifikasyona göre tüm tarayıcılarda başarısız olmalıdır.
David Murdoch

Ham deflate(yani değil zlib , hiçbir başlıklar) sadece çalışma olacak IE7 eğer encoding:gzip(sadece krom V24 test) ve encoding:deflateiçinde krom .
Scotty.NET
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.