سؤال


تحديث 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. لذلك ، على الرغم من أن ترميز نقل "انحراف" باستخدام تنسيق ZLIB سيكون النهج الأكثر كفاءة (وفي الحقيقة بالضبطما تم تصميم تنسيق Zlib لـ) ، ربما يكون استخدام ترميز نقل "GZIP" أكثر موثوقية بسبب اختيار مؤسف للاسم من جانب مؤلفي HTTP 1.1. "(المصدر: http://www.gzip.org/zlib/zlib_faq.html)

لذا ، سؤالي: إذا أرسلت بيانات deflate الخام مع عدم وجود غلاف zlib (أو GZIP ، لهذه المسألة) ، فهل هناك أي متصفحات حديثة (على سبيل المثال ، IE6 و UP ، FF ، Chrome ، Safari ، إلخ) لا يمكنها فهم DEFLATE البيانات المضغوطة (على افتراض أن رأس طلب HTTP "قبول" يحتوي على "deflate")؟

ستكون البيانات المنهارة دائمًا بضعة بايتات أصغر من GZIP.

إذا كانت كل هذه المتصفحات يمكنها فك تشفير البيانات بنجاح ، فما هي الجوانب السلبية لإرسال انحراف RAW بدلاً من ZLIB؟



تحديث 11 سبتمبر 2010:

تم إنشاء منصة اختبار لهذا الغرض هنا

هل كانت مفيدة؟

المحلول

تحديث: تم إسقاط المتصفحات دعمًا لـ RAW Deflate. أكمل 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 "قبول الترميز: GZIP". غير مسموح بمنفذ.


أستنتج أننا نستطيع إرسال دائما الخام انحراف (عندما يحتوي رأس طلب HTTP "قبول التشفير" على "Deflate") وسيتمكن المتصفح من تفسير البيانات المشفرة بشكل صحيح. هل يمكن لأحد أن يثبت هذا الخطأ؟

ملاحظة: .NET التنفيذ الأصلي لـ DEFLATE (system.io.compression.deflatestream) هو انحراف خام. كما تمتص. يرجى استخدام Zlib.net لجميع احتياجات انحراف .NET الخاصة بك.

نصائح أخرى

يفشل متصفح Android 1.6 (V4) في كل من ZLIB واختبار Deflate على صفحتك. لقد أضفته إلى قائمتك.

أليس كذلك AddOutputFilterByType DEFLATE باستخدام mod_deflate يرسل بواسطة GZIP افتراضيًا؟

على حد علمي ، نعم - إلى حد كبير ، "يمكنك دائمًا إرسال الانكماش الخام وسيكون كل شيء على ما يرام" ... لا يوجد "دائمًا" ، ولكن الأهم من ذلك كله. إذا لم يكن الأمر كذلك ، فهذه هي مشكلة المتصفح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top