Giảm khả năng tương thích của trình duyệt nén và ưu điểm so với GZIP


91

CẬP NHẬT ngày 10 tháng 2 năm 2012:

zOompf đã hoàn thành một số nghiên cứu rất kỹ lưỡng về chủ đề này ở đây . Nó vượt trội hơn bất kỳ phát hiện nào dưới đây.


CẬP NHẬT ngày 11 tháng 9 năm 2010:

Một nền tảng thử nghiệm đã được tạo cho điều này ở đây




Định nghĩa HTTP 1.1 của GZIP và DEFLATE (zlib) để biết một số thông tin cơ bản:

"'Gzip' là định dạng gzip và 'deflate' là định dạng zlib . Có lẽ họ nên gọi định dạng thứ hai là 'zlib' để tránh nhầm lẫn với định dạng dữ liệu nén xì hơi thô. Mặc dù HTTP 1.1 RFC 2616 trỏ đúng đến đặc điểm kỹ thuật zlib trong RFC 1950 cho mã hóa truyền 'xì hơi', đã có báo cáo về các máy chủ và trình duyệt tạo ra không chính xác hoặc mong đợi dữ liệu xì hơi thô theo đặc điểm kỹ thuật xì hơi trong RFC 1951, đáng chú ý nhất là các sản phẩm của Microsoft . Vì vậy, mặc dù 'xì hơi' chuyển mã hóa bằng cách sử dụng định dạng zlib sẽ là cách tiếp cận hiệu quả hơn ( và trên thực tế chính xác là định dạng zlib được thiết kế cho), sử dụng mã hóa truyền 'gzip' có lẽ đáng tin cậy hơn do sự lựa chọn tên không may từ phía các tác giả HTTP 1.1. "(nguồn: http://www.gzip.org/zlib/zlib_faq.html )

Vì vậy, câu hỏi của tôi: nếu tôi gửi dữ liệu xì hơi RAW bằng KHÔNG trình bao bọc zlib (hoặc gzip, cho vấn đề đó) thì có bất kỳ trình duyệt hiện đại nào (ví dụ: IE6 trở lên, FF, Chrome, Safari, v.v.) KHÔNG thể hiểu được quá trình xì hơi thô không dữ liệu nén (giả sử tiêu đề yêu cầu HTTP "Accept-Encoding" chứa "deflate")?

Dữ liệu deflate sẽ LUÔN LUÔN nhỏ hơn vài byte so với GZIP.

Nếu tất cả các trình duyệt này có thể giải mã thành công dữ liệu, thì có nhược điểm gì khi gửi RAW deflate thay vì zlib?



CẬP NHẬT ngày 11 tháng 9 năm 2010:

Một nền tảng thử nghiệm đã được tạo cho điều này ở đây


1
Bạn có vui lòng mở rộng về lý do tại sao System.IO.Compression.DeflateStream lại kém hơn so với zlib.net không? Google không cho tôi thấy nhiều thứ có liên quan ngoại trừ một người nói rằng nó "không có tỷ lệ nén đặc biệt tốt."
Joel Mueller

Đúng vậy, tỷ lệ nén cho cả hai phương thức gzip và deflate của .net dường như không ở bất kỳ đâu gần với những gì chúng nên có. Tuy nhiên, tôi chưa thực hiện bất kỳ điểm chuẩn tốc độ nào giữa hai (zlib.net so với .net gốc).
David Murdoch

Tại sao bạn không ghi lại kết quả của trường hợp thử nghiệm của bạn?
Gumbo

1
Tôi đã xem qua lib System.IO.Compression, và nó dường như sử dụng một cây tĩnh / được xác định trước - do đó, việc nén không được tối ưu hóa cho luồng cụ thể. Nên là phương pháp nhanh nhất, nhưng chắc chắn sẽ mang lại tỷ lệ nén kém.
Brady Moritz

2
@JoelMueller Điều này có thể giải thích: virtualdub.org/blog/pivot/entry.php?id=335
Nayuki

Câu trả lời:


37

CẬP NHẬT: Các trình duyệt đã ngừng hỗ trợ cho giảm phát thô. zOompf đã hoàn thành một số nghiên cứu rất kỹ lưỡng về chủ đề này ở đây . Thật không may, có vẻ như xì hơi thô KHÔNG an toàn để sử dụng.


Kiểm tra http://www.vervestudios.co/projects/compression-tests/results để biết thêm kết quả.

Dưới đây là các trình duyệt đã được thử nghiệm:

/*  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 Gửi tiêu đề yêu cầu HTTP "Accept-Encoding: gzip". Giảm phát không được phép.


Tôi kết luận rằng chúng tôi luôn có thể gửi DEFLATE thô (khi tiêu đề yêu cầu HTTP "Chấp nhận-Mã hóa" chứa "deflate") và trình duyệt sẽ có thể diễn giải chính xác dữ liệu được mã hóa. Ai đó có thể chứng minh điều này sai?

lưu ý: Triển khai gốc của .NET của DEFLATE (System.IO.Compression.DeflateStream) là DEFLATE thô. Nó cũng tệ. Vui lòng sử dụng zlib.net cho tất cả các nhu cầu giảm phát .NET của bạn.


1
Bạn có thể nói rõ hơn về cách sử dụng zlib.net để giảm hơi không? Làm thế nào điều đó phù hợp với biểu đồ trên, nơi nó nói rằng giảm phát thô hoạt động nhưng zlib thì không trong một số trường hợp XP IE?
David Eison

Android hỗ trợ nén deflate kể từ API 9. hãy xem: developer.android.com/reference/java/util/zip/… để biết thêm thông tin
Stuart Blackler 30/09/11

1
@DavidMurdoch kết quả chỉ lành mạnh từ các bài kiểm tra của bạn dường như không bao giờ sử dụng deflate , vervestudios.co/projects/compression-tests/results Tôi nghĩ rằng câu trả lời này nên được sửa đổi để phản ánh rằng
Sam Saffron

Đúng, tôi đồng ý. Đang cập nhật nó ngay bây giờ.
David Murdoch

6

Trình duyệt Android 1.6 (v4) không thành công cả kiểm tra zlib và kiểm tra xì hơi trên trang của bạn. Tôi đã thêm nó vào danh sách của bạn.


Cảm ơn! Trình duyệt của Android gửi mã hóa nội dung nào?
David Murdoch

Nó gửi 'Mã hóa chấp nhận: gzip'.
Josef Pfleger 22/10/09

1

Không phải là trường hợp AddOutputFilterByType DEFLATEsử dụng mod_deflate gửi bởi gzip theo mặc định?


1
Này Paul, tôi có cảm giác như đang nói chuyện với một người nổi tiếng ... bạn ở khắp mọi nơi. :-) Dù sao thì, AddOutputFilertByType DEFLATEgzips phản hồi thay vì làm xẹp nó theo mặc định (theo tôi biết). Gzipdeflate+ đầu trang 10 byte + chân trang 8 byte - có nghĩa là nó GzipLUÔN LUÔN lớn hơn deflate... vậy tại sao chúng ta nên sử dụng gzip? (xem en.wikipedia.org/wiki/Gzip#File_format để biết chi tiết về gzip được tạo thành từ gì). Với điều đó đã nói, tôi không chắc về cách cài đặt deflatelàm phương pháp nén ưa thích trong Apache.
David Murdoch

-1

Theo như tôi biết, có - bạn "luôn có thể gửi DEFLATE thô và mọi thứ sẽ ổn" ... không phải "luôn luôn", nhưng hầu hết các trường hợp. nếu không, đây là vấn đề của trình duyệt.


Tôi đang cố gắng tìm các trường hợp khi giảm phát thô không thành công. Theo thông số kỹ thuật, nó sẽ không thành công trong tất cả các trình duyệt.
David Murdoch

Raw deflate(tức là không phải zlib , không có tiêu đề nào cả) sẽ chỉ hoạt động trong IE7 nếu encoding:gzipvà (chỉ được thử nghiệm trong chrome v24) encoding:deflatetrong chrome .
Scotty.NET
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.