실제 서버가 deflate 인코딩보다 gzip을 선호하는 이유는 무엇입니까?
우리는 이미 deflate 인코딩이 인코딩 속도, 디코딩 및 압축 크기 측면에서 gzip 보다 승자 임을 알고 있습니다.
그렇다면 (내가 찾을 수있는) 큰 사이트가 (내가 그것을 받아들이는 브라우저를 사용할 때) 왜 그것을 보내지 않습니까?
야후는 디 플레이트가 "덜 효과적"이라고 주장 합니다. 왜?
저는 deflate를 선호하는 HTTP 서버 소프트웨어를 유지하고 있습니다. 그래서 그렇게하지 않을 정말 좋은 이유가 있는지 알고 싶습니다.
사양과 HTTP 사이의 이름 지정에 대해 약간의 혼동이 있습니다.
- RFC 1951에 정의 된 DEFLATE 는 압축 된 데이터 형식 입니다.
- RFC 1950에 정의 된 ZLIB 는 DEFLATE 데이터 형식 을 사용 하는 압축 데이터 형식 입니다 .
- RFC 1952에 정의 된 GZIP 은 DEFLATE 압축 데이터 형식 을 사용 하는 파일 형식 입니다 .
그러나 HTTP는 다른 이름을 사용합니다 .
gzipRFC 1952 [25]에 설명 된대로 파일 압축 프로그램 "gzip"(GNU zip)에 의해 생성 된 인코딩 형식. 이 형식은 32 비트 CRC를 사용하는 Lempel-Ziv 코딩 (LZ77)입니다.
deflateRFC 1951 [29]에 설명 된 "deflate"압축 메커니즘과 결합 된 RFC 1950 [31]에 정의 된 "zlib"형식.
요약하자면 :
gzip는 IS GZIP의 파일 형식.deflate실제로 ZLIB 데이터 형식입니다. (그러나 일부 클라이언트는에 대한 실제 DEFLATE 데이터 형식 도 허용합니다deflate.)
"gzip"과 "deflate"HTTP 1.1 인코딩의 차이점은 무엇입니까? 에 대한이 답변 도 참조하십시오 . :
"gzip"과 "deflate"HTTP 1.1 인코딩의 차이점은 무엇입니까?
"gzip"은 gzip 형식이고 "deflate"는 zlib 형식입니다. 원시 deflate 압축 데이터 형식과의 혼동을 피하기 위해 두 번째 "zlib"를 대신 호출했을 것입니다. HTTP 1.1 RFC 2616이 "deflate"전송 인코딩에 대해 RFC 1950의 zlib 사양을 올바르게 가리키고 있지만 RFC 1951의 deflate 사양에 따라 원시 deflate 데이터를 잘못 생성하거나 예상하는 서버 및 브라우저에 대한보고가있었습니다. 특히 Microsoft . 따라서 zlib 형식을 사용하는 "deflate"전송 인코딩이보다 효율적인 접근 방식 (실제로 zlib 형식이 설계된 것과 정확히 일치)이 될지라도 "gzip"전송 인코딩을 사용하는 것은 아마도 불행한 선택으로 인해 더 신뢰할 수 있습니다. HTTP 1.1 작성자의 이름입니다.
내 최소 테스트에서 대부분의 HTTPd는 다음과 같이 나타납니다.
- deflate on-the-fly : Apache의 mod_deflate (놀라움), GWS
- 또는 gzip 전송을 선호합니다 : IIS, lighttpd의 mod_compress
따라서 가장 많이 사용되는 서버 (Apache)에서 deflate를 보내려면 미리 인코딩 된 파일을 유지하고 mod_negotiate를 사용해야합니다 (디 플레이트를 선호하기 위해 유형 맵을 사용해야 할 수도 있음).
이 번거 로움으로 인해 deflate는 거의 사용되지 않으므로 버그가 gzip 지원보다 클라이언트 deflate 지원에 존재할 가능성 이 더 큽니다 .
자세한 내용은이 웹 사이트를 확인하십시오 : http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests
사양에 따라 Deflate는 실제로 zlib (웹을 통해 콘텐츠를 스트리밍하기 위해 특별히 개발 된 압축 형식)입니다 ... 이것은 deflate를 둘러싼 래퍼입니다.
그러나 Internet Explorer는 HTTP 1.1 deflate (zlib)를 원시 deflate로 잘못 구현합니다. 따라서 서버가 올바른 HTTP 1.1 deflate (zlib) 콘텐츠를 IE에 보내면 질식합니다.
나는 주제를 조금 조사했고 항상 원시 deflate를 최신 브라우저로 보내는 것이 안전 해 보입니다 . 사실 zlib가 아닌 원시 인지 확인하십시오 .
자세한 내용은이 문서를 확인하십시오> Gzip vs Deflate (zlib) revisited .
그래서 gzip을 통해 계속해서 deflate를 보내야 할 좋은 이유가 있다고 생각합니다.
내가 아는 한 (면책 조항 : 여기 전문가가 아니며 내가 들었던 것) gzip은 동일한 알고리즘을 사용 deflate하지만 더 큰 크기로 만드는 헤더 항목이 더 많습니다 ( deflate. 그러나 deflate적은 클라이언트와 프록시가 지원 한다고 생각 합니다.
나는 똑같은 것을 궁금해했다. :). 나는 그것이 오래된 (아마도 오래된) 브라우저의 호환성과 관련이 있다고 생각합니다. 이전 브라우저가 특정 인스턴스 (?)에서 mod_gzipped 압축 된 콘텐츠에서 튀어 나올 가능성이 더 높다는 어딘가에서 읽었지만 인터넷 검색을 통해 검색을 중단하는 것이 가장 좋다는 결론을 내 렸습니다.
ActionScript 3에는 기본 deflate 지원이 있지만 gzip의 경우 외부 라이브러리를 사용해야합니다.
'program story' 카테고리의 다른 글
| null 객체 참조에 대한 android.content.Context.getPackageName () ' (0) | 2020.11.28 |
|---|---|
| git 명령에서 'origin'과 'remote'의 차이점은 무엇입니까? (0) | 2020.11.28 |
| Git에서 로컬 변경 사항이 푸시되지 않도록 방지 (0) | 2020.11.28 |
| 동기화 된 절 내에서 예외를 throw하면 부작용이 있습니까? (0) | 2020.11.27 |
| 왜 java.security.NoSuchProviderException 그런 공급자가 없습니까 : BC? (0) | 2020.11.27 |