قم بتفريغ توافق متصفح الضغط والمزايا على GZIP
-
21-09-2019 - |
سؤال
تحديث 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 افتراضيًا؟
على حد علمي ، نعم - إلى حد كبير ، "يمكنك دائمًا إرسال الانكماش الخام وسيكون كل شيء على ما يرام" ... لا يوجد "دائمًا" ، ولكن الأهم من ذلك كله. إذا لم يكن الأمر كذلك ، فهذه هي مشكلة المتصفح.