เหตุใดจึงใช้การยุบแทน gzip สำหรับไฟล์ข้อความที่ให้บริการโดย Apache
คำตอบง่ายๆคือทำไม่ได้
RFC 2616กำหนด deflate เป็น:
deflate รูปแบบ "zlib" ที่กำหนดใน RFC 1950 ร่วมกับกลไกการบีบอัด "deflate" ที่อธิบายไว้ใน RFC 1951
รูปแบบ zlib ถูกกำหนดในRFC 1950เป็น:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
ดังนั้นส่วนหัวบางส่วนและการตรวจสอบ ADLER32
RFC 2616 กำหนด gzip เป็น:
gzip รูปแบบการเข้ารหัสที่สร้างโดยโปรแกรมบีบอัดไฟล์ "gzip" (zip GNU) ตามที่อธิบายไว้ใน RFC 1952 [25] รูปแบบนี้เป็นการเข้ารหัส Lempel-Ziv (LZ77) ด้วย CRC 32 บิต
RFC 1952กำหนดข้อมูลที่บีบอัดเป็น:
รูปแบบปัจจุบันใช้วิธีการบีบอัด DEFLATE แต่สามารถขยายได้อย่างง่ายดายเพื่อใช้วิธีการบีบอัดอื่น ๆ
CRC-32 ช้ากว่า ADLER32
เมื่อเทียบกับการตรวจสอบความซ้ำซ้อนแบบวนซ้ำที่มีความยาวเท่ากันจะทำการแลกเปลี่ยนความน่าเชื่อถือสำหรับความเร็ว (เลือกแบบหลัง)
ดังนั้น ... เรามี 2 กลไกการบีบอัดที่ใช้อัลกอริทึมเดียวกันสำหรับการบีบอัด แต่อัลกอริทึมที่แตกต่างกันสำหรับส่วนหัวและการตรวจสอบ
ตอนนี้แพ็กเก็ต TCP พื้นฐานน่าเชื่อถืออยู่แล้วดังนั้นปัญหาที่นี่ไม่ใช่ Adler 32 เทียบกับCRC-32ที่ GZIP ใช้
เปิดเบราว์เซอร์จำนวนมากในช่วงหลายปีที่ผ่านมาใช้อัลกอริทึมการยุบที่ไม่ถูกต้อง แทนที่จะคาดหวังว่าส่วนหัว zlib ใน RFC 1950 พวกเขาเพียงแค่คาดว่าจะโหลดข้อมูลที่บีบอัด ในทำนองเดียวกันเว็บเซิร์ฟเวอร์ต่าง ๆ ก็ทำผิดพลาดเหมือนกัน
ดังนั้นในช่วงหลายปีที่ผ่านมาเบราว์เซอร์เริ่มนำการใช้งานแบบฟัซซี่ลอจิกแบบฟัซซี่ไปใช้พวกเขาพยายามตรวจสอบส่วนหัว zlib และตัวตรวจสอบแอดเลอร์หากไม่สำเร็จ
ผลของการมีตรรกะที่ซับซ้อนเช่นนั้นคือมันมักจะเสีย Verve Studio มีส่วนทดสอบของผู้ใช้ที่แสดงให้เห็นว่าสถานการณ์เลวร้ายเพียงใด
ตัวอย่างเช่น: deflate ทำงานใน Safari 4.0 แต่ใช้งานไม่ได้ใน Safari 5.1 ก็ยังมีปัญหาใน IE เสมอ
ดังนั้นสิ่งที่ดีที่สุดที่ควรทำคือหลีกเลี่ยงการยุบตัวโดยรวมการเพิ่มความเร็วเล็กน้อย (เนื่องจาก adler 32) ไม่คุ้มกับความเสี่ยงของ payload ที่เสีย