Apache가 제공하는 텍스트 파일에 GZIP 대신 Deflate를 사용하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/388595

문제

램프 서버에서 제공하는 HTML, CSS 및 JavaScript 파일에 대한 방법이 제공하는 장점 더 나은 대안이 있습니까?

서버는 JSON을 사용하여 맵 애플리케이션에 정보를 제공하므로 많은 양의 작은 파일입니다.

또한보십시오 HTTP 압축을 위해 Deflate를 통해 GZIP를 선택하는 데 관련된 성능이 있습니까?

도움이 되었습니까?

해결책

Apache가 제공하는 텍스트 파일에 GZIP 대신 Deflate를 사용하는 이유는 무엇입니까?

간단한 대답은입니다 ~하지 않다.


RFC 2616 deflate를 다음과 같이 정의합니다.

RFC 1951에 설명 된 "Deflate"압축 메커니즘과 함께 RFC 1950에 정의 된 "Zlib"형식을 디플레이트합니다.

Zlib 형식은 정의됩니다 RFC 1950 처럼 :

     0   1
     +---+---+
     |CMF|FLG|   (more-->)
     +---+---+

       0   1   2   3
     +---+---+---+---+
     |     DICTID    |   (more-->)
     +---+---+---+---+

     +=====================+---+---+---+---+
     |...compressed data...|    ADLER32    |
     +=====================+---+---+---+---+

따라서 몇 개의 헤더와 Adler32 체크섬이 있습니다

RFC 2616은 GZIP를 다음과 같이 정의합니다.

GZIP RFC 1952 [25]에 설명 된대로 파일 압축 프로그램 "GZIP"(GNU ZIP)에 의해 생성 된 인코딩 형식. 이 형식은 32 비트 CRC 인 Lempel-Ziv 코딩 (LZ77)입니다.

RFC 1952 압축 데이터를 다음과 같이 정의합니다.

형식은 현재 Deflate 압축 방법을 사용하지만 다른 압축 방법을 사용하기 위해 쉽게 확장 할 수 있습니다.

CRC-32입니다 Adler32보다 느립니다

같은 길이의 주기적 중복 검사와 비교하여 속도에 대한 신뢰성 (후자 선호).

그래서 ... 우리는 2 개의 압축 메커니즘을 사용합니다. 같은 압축 알고리즘이지만 a 다른 헤더 및 체크섬 알고리즘.

이제 기본 TCP 패킷은 이미 있습니다 꽤 신뢰할 수 있습니다, 여기서 문제는 Adler 32 대가 아닙니다. CRC-32 그 gzip을 사용합니다.


수년 동안 많은 브라우저가 잘못된 디플레이트 알고리즘을 구현했습니다. RFC 1950의 Zlib 헤더를 기대하는 대신 압축 페이로드를 예상했습니다. 마찬가지로 다양한 웹 서버도 동일한 실수를 저질렀습니다.

그래서 수년에 걸쳐 브라우저는 구현을 시작했습니다 퍼지 논리 Deflate 구현, 그들은 Zlib 헤더 및 Adler Checksum을 시도합니다.

그런 복잡한 논리를 가진 결과는 종종 깨진 것입니다. Verve Studio는 a 사용자가 테스트를 기여했습니다 상황이 얼마나 나쁜지를 보여주는 섹션.

예를 들어 : Deflate는 Safari 4.0에서 작동하지만 Safari 5.1에서 깨졌으며 IE에 항상 문제가 있습니다.


따라서, 가장 좋은 방법은 전적으로 디플레이트를 피하는 것입니다. (Adler 32로 인한 경미한 속도 부스트)는 페이로드가 부러 질 위험이 없습니다.

다른 팁

GZIP는 단순히 검사소와 헤더/바닥 글을 덜 휘감합니다. 꺾다 보다 빠르다, 그러나 AS 나는 어려운 방법을 배웠다.

gzip vs deflate graph

당신은 실제로 옵션으로 deflate를 선택할 수 없을 것입니다. 당신이 기대할 수있는 것과는 반대로 mod_deflate Deflate가 아니라 GZIP를 사용합니다. 따라서 대부분의 포인트는 유효하지만 대부분의 경우에는 관련이 없을 것입니다.

GZIP는 기본적으로 Deflate 주위에 감싸는 헤더이기 때문에 Deflate와 GZIP 사이에는 큰 차이가 없다고 생각합니다 (RFC 1951 및 1952 참조).

주된 이유는 Deflate가 GZIP보다 인코딩하기가 더 빠르기 때문에 바쁜 서버에서 차이를 만들 수 있기 때문입니다. 정적 페이지를 사용하면 한 번 쉽게 미리 압축 될 수 있기 때문에 다른 질문입니다.

mod_deflate는 서버에서 더 적은 수의 리소스가 필요하지만 압축량 측면에서 작은 페널티를 지불 할 수 있습니다.

많은 작은 파일을 제공하는 경우 압축 및 압축되지 않은 솔루션을 벤치마킹 및로드 테스트하는 것이 좋습니다. 압축을 가능하게하면 절약되지 않는 경우를 찾을 수 있습니다.

감압을위한 GZIP & deflate에는 아무런 차이가 없어야합니다. gzip은 체크섬을 포함하여 수십 개의 바이트 헤더가 감싸고 있습니다. 체크섬은 압축 느린 이유입니다. 그러나 수백만 파일의 파일을 미리 압축 할 때 해당 체크섬을 파일 시스템에서 생계 점검으로 원합니다. 또한 CommandLine 도구를 사용하여 파일에서 통계를 얻을 수 있습니다. 당사 사이트의 경우 수많은 정적 데이터 (전체 오픈 디렉토리, 13,000 게임, 수백만 개의 키워드를위한 자동 완성 등)를 미리 압축하고 있으며 Alexa의 모든 웹 사이트보다 95% 더 빠릅니다. 팩스 검색. 그러나 우리는 홈 성장 독점 웹 서버를 사용합니다. Apache/mod_deflate는 단지 그것을 자르지 않았습니다. 해당 파일이 파일 시스템으로 압축되면 최소 파일 시스템 블록 크기로 파일에 적중 할뿐만 아니라 웹 서버가 덜 신경 쓸 수있는 파일 시스템에서 파일을 관리하는 데있어 모든 불필요한 오버 헤드가 있습니다. 문제는 총 디스크 발자국과 액세스/감압 시간이어야하며,이 데이터를 압축 할 수있는 속도. 발자국은 디스크 공간이 저렴하더라도 캐시에 가능한 한 많이 원하기 때문에 중요합니다.

APACHE2가 포함 된 Ubuntu 및 이미 설치된 Deflate 모듈 (기본적으로)에서 활성화 할 수 있습니다. 꺾다 두 가지 쉬운 단계에서 GZIP 압축 :

a2enmod deflate
/etc/init.d/apache2 force-reload

그리고 당신은 멀리! ADSL 연결을 통해 제공 한 페이지가 훨씬 빨리로드되었습니다.

편집하다: @gertvandenberg의 의견에 따르면, 이것은 deflate가 아닌 gzip 압축을 가능하게합니다.

내가 정확하게 기억한다면

  • GZIP는 Deflate보다 조금 더 압축됩니다
  • Deflate가 더 효율적입니다
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top