Tại sao nên sử dụng deflate thay vì gzip cho các tệp văn bản được cung cấp bởi Apache?
Câu trả lời đơn giản là không .
RFC 2616 định nghĩa giảm phát là:
deflate Định dạng "zlib" được định nghĩa trong RFC 1950 kết hợp với cơ chế nén "deflate" được mô tả trong RFC 1951
Định dạng zlib được định nghĩa trong RFC 1950 là:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Vì vậy, một vài tiêu đề và tổng kiểm tra ADLER32
RFC 2616 định nghĩa gzip là:
gzip Một định dạng mã hóa được tạo bởi chương trình nén tệp "gzip" (GNU zip) như được mô tả trong RFC 1952 [25]. Định dạng này là mã hóa Lempel-Ziv (LZ77) với CRC 32 bit.
RFC 1952 định nghĩa dữ liệu nén là:
Định dạng hiện sử dụng phương pháp nén DEFLATE nhưng có thể dễ dàng mở rộng để sử dụng các phương pháp nén khác.
CRC-32 chậm hơn ADLER32
So với kiểm tra dự phòng theo chu kỳ có cùng độ dài, nó giao dịch độ tin cậy cho tốc độ (ưu tiên kiểm tra sau).
Vì vậy, ... chúng ta có 2 cơ chế nén sử dụng cùng một thuật toán để nén, nhưng một thuật toán khác nhau cho các tiêu đề và tổng kiểm tra.
Bây giờ, các gói TCP cơ bản đã khá đáng tin cậy , vì vậy vấn đề ở đây không phải là Adler 32 vs CRC-32 mà GZIP sử dụng.
Hóa ra nhiều trình duyệt trong những năm qua đã thực hiện một thuật toán khử lỗi không chính xác. Thay vì mong đợi tiêu đề zlib trong RFC 1950, họ chỉ đơn giản mong đợi tải trọng nén. Tương tự các máy chủ web khác nhau đã mắc lỗi tương tự.
Vì vậy, qua nhiều năm, các trình duyệt bắt đầu thực hiện logic mờ khử lỗi , họ cố gắng kiểm tra tiêu đề zlib và tổng kiểm tra, nếu thất bại, họ cố gắng tải trọng.
Kết quả của việc có logic phức tạp như thế là nó thường bị hỏng. Verve Studio có phần kiểm tra đóng góp của người dùng cho thấy tình hình tồi tệ như thế nào.
Ví dụ: deflate hoạt động trong Safari 4.0 nhưng bị hỏng trong Safari 5.1, nó cũng luôn có vấn đề trên IE.
Vì vậy, điều tốt nhất cần làm là tránh xì hơi hoàn toàn, việc tăng tốc độ nhỏ (do adler 32) không đáng để mạo hiểm với tải trọng bị hỏng.