GZIP에 비해 압축 브라우저 호환성 및 이점 축소


91

2012 년 2 월 10 일 업데이트 :

zOompf는 여기에서 바로이 주제에 대한 매우 철저한 연구를 완료 했습니다 . 아래의 결과를 능가합니다.


2010 년 9 월 11 일 업데이트 :

여기에 테스트 플랫폼이 생성되었습니다 .




일부 배경 정보에 대한 GZIP 및 DEFLATE (zlib)의 HTTP 1.1 정의 :

" 'Gzip'은 gzip 형식이고 'deflate'는 zlib 형식 입니다. 원시 deflate 압축 데이터 형식과의 혼동을 피하기 위해 두 번째 형식 인 'zlib'를 호출했을 것입니다. HTTP 1.1 RFC 2616은 'deflate'전송 인코딩에 대한 RFC 1950의 zlib 사양에서 RFC 1951의 deflate 사양에 따라 원시 deflate 데이터를 잘못 생성하거나 예상하는 서버 및 브라우저에 대한보고가있었습니다 . 특히 Microsoft 제품 입니다. zlib 형식을 사용하는 전송 인코딩이보다 효율적인 접근 방식입니다 ( 실제로 zlib 형식이 설계된 용도), 'gzip'전송 인코딩을 사용하는 것은 아마도 HTTP 1.1 작성자가 이름을 잘못 선택했기 때문에 더 신뢰할 수 있습니다. "(출처 : http://www.gzip.org/zlib/zlib_faq.html )

그래서, 내 질문 : 내가 zlib 래퍼 (또는 gzip, 그 문제에 대해)로 RAW deflate 데이터를 보내면 원시 deflate를 이해할 수없는 최신 브라우저 (예 : IE6 이상, FF, Chrome, Safari 등)가 있습니까? 압축 된 데이터 (HTTP 요청 헤더 "Accept-Encoding"에 "deflate"가 포함되어 있다고 가정)?

Deflate 데이터는 항상 GZIP보다 몇 바이트 더 작습니다.

이러한 모든 브라우저가 데이터를 성공적으로 디코딩 할 수 있다면 zlib 대신 RAW deflate를 보내는 데 어떤 단점이 있습니까?



2010 년 9 월 11 일 업데이트 :

여기에 테스트 플랫폼이 생성되었습니다 .


1
System.IO.Compression.DeflateStream이 zlib.net에 비해 왜 짜증나는지 확장 해 주시겠습니까? 구글은 "특히 좋은 압축률이 없다"고 언급 한 한 사람을 제외하고는 관련성 높은 것을 보여주지 않고있다.
Joel Mueller

맞습니다. .net의 gzip 및 deflate 방법 모두에 대한 압축 비율이 그들이 있어야 할 것 근처에 있지 않은 것 같습니다. 그러나 두 가지 (zlib.net 대 기본 .net)간에 속도 벤치 마크를 수행하지 않았습니다.
David Murdoch

테스트 케이스의 결과 만 기록하지 않는 이유는 무엇입니까?
Gumbo

1
System.IO.Compression lib를 살펴 봤는데 정적 / 미리 정의 된 트리를 사용하는 것 같습니다. 따라서 압축이 특정 스트림에 최적화되어 있지 않습니다. 가장 빠른 방법이어야하지만 확실히 압축률이 떨어집니다.
Brady Moritz

2
@JoelMueller 이것은 설명 할 수 있습니다 : virtualdub.org/blog/pivot/entry.php?id=335
Nayuki

답변:


37

업데이트 : 브라우저는 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 요청 헤더 "Accept-Encoding : gzip"을 보냅니다. 수축은 허용되지 않습니다.


나는 항상 원시 DEFLATE를 보낼 수 있고 (HTTP 요청 헤더 "Accept-Encoding"에 "deflate"가 포함 된 경우) 브라우저가 인코딩 된 데이터를 올바르게 해석 할 수 있다고 결론을 내립니다 . 누군가 이것이 틀렸다는 것을 증명할 수 있습니까?

참고 : .NET의 DEFLATE (System.IO.Compression.DeflateStream) 기본 구현은 원시 DEFLATE입니다. 그것은 또한 짜증납니다. 모든 .NET deflating 요구에 zlib.net 을 사용하십시오 .


1
deflating을 위해 zlib.net을 사용하는 것에 대해 더 구체적으로 말할 수 있습니까? 원시 deflate가 작동하지만 일부 XP IE의 경우 zlib가 작동하지 않는 위의 차트와 어떻게 일치합니까?
David Eison

Android는 API 9부터 deflate 압축을 지원합니다. 자세한 내용 은 developer.android.com/reference/java/util/zip/… 을 참조하세요.
Stuart Blackler 2011 년

1
당신의 테스트에서 유일하게 제정신 결과를 @DavidMurdoch는 것 DEFLATE을 사용하지 않습니다 , vervestudios.co/projects/compression-tests/results 나는이 대답을 반영하기 위해 편집해야합니다 생각
샘 사프란

네, 동의합니다. 지금 업데이트 중입니다.
데이비드 머독

6

Android 1.6 브라우저 (v4)는 페이지의 zlib 및 deflate 테스트 모두에 실패합니다. 목록에 추가했습니다.


감사! Android의 브라우저는 어떤 콘텐츠 인코딩을 전송합니까?
David Murdoch

'Accept-Encoding : gzip'을 보냅니다.
Josef Pfleger

1

AddOutputFilterByType DEFLATEmod_deflate 를 사용하면 기본적으로 gzip으로 보내는 경우가 아닙니까?


1
안녕 폴, 내가 유명인과 이야기하는 것 같은 느낌이 든다 ... 당신은 어디에나 있습니다. :-) 어쨌든, AddOutputFilertByType DEFLATE응답을 기본적으로 압축하는 대신 gzips (내가 아는 한). Gzipdeflate+ 10 바이트 헤더 + 8 바이트 바닥 글입니다. 즉, Gzip항상 deflate... 보다 클 것입니다 . 왜 gzip을 사용해야합니까? ( gzip의 구성에 대한 자세한 내용은 en.wikipedia.org/wiki/Gzip#File_format 참조 ). 즉, deflateApache에서 선호하는 압축 방법으로 설정하는 방법을 잘 모르겠습니다 .
David Murdoch

-1

내가 아는 한, 예-거의 "항상 원시 DEFLATE를 보낼 수 있고 모든 것이 괜찮을 것"입니다. "항상"은 아니지만 대부분의 경우가 있습니다. 그렇지 않다면 이것은 브라우저의 문제입니다.


원시 수축이 실패하는 경우를 찾으려고합니다. 사양에 따르면 모든 브라우저에서 실패해야합니다.
David Murdoch

원시 deflate(즉,하지 ZLIB , 전혀 헤더) 만에서 작동합니다 IE7 의 경우 encoding:gzip(만 크롬 V24 시험)과 encoding:deflate크롬 .
Scotty.NET 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.