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


215

LAMP 서버가 제공하는 html, css 및 javascript 파일에 대해 어떤 방법이 장점을 제공합니까? 더 나은 대안이 있습니까?

서버는 대량의 작은 파일 인 Json을 사용하여 맵 응용 프로그램에 정보를 제공합니다.

참조 HTTP 압축 공기를 빼다 이상 GZIP 선택에 관여 히트 어떤 성능이 있습니까?


답변이 바뀌 었습니다 ... 현재의 합의는 gzip에 찬성하여 2 : 1입니다
Ken

1
mod_deflate는 Apache 2 용, mod_gzip은 Apache 1.3 용입니다.
SPRBRN

답변:


315

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 개의 압축 메커니즘이 있습니다 .

이제 기본 TCP 패킷은 이미 매우 안정적 이므로 여기서 문제는 GZIP가 사용하는 Adler 32 vs CRC-32 가 아닙니다 .


수년 동안 많은 브라우저가 잘못된 수축 알고리즘을 구현 한 것으로 나타났습니다. RFC 1950의 zlib 헤더를 기대하는 대신 압축 된 페이로드를 예상했습니다. 마찬가지로 다양한 웹 서버도 같은 실수를했습니다.

따라서 수년 동안 브라우저는 퍼지 논리 수축 구현을 구현 하기 시작 하여 페이로드를 시도하지 않으면 zlib 헤더 및 애들러 체크섬을 시도합니다.

이와 같은 복잡한 논리의 결과는 종종 깨진 것입니다. Verve Studio에는 상황이 얼마나 나쁜지 보여주는 사용자 제공 테스트 섹션이 있습니다.

예를 들어, deflate는 Safari 4.0에서 작동하지만 Safari 5.1에서는 손상되었으며 항상 IE에 문제가 있습니다.


따라서 가장 좋은 방법은 수축을 완전히 피하는 것입니다. 애들러 32로 인한 작은 속도 향상은 페이로드가 부러 질 위험이 없습니다.


adler32와 gzip을 결합한 새로운 표준이 없어야합니까?
Pacerier

1
@ Sam Saffron, 웹 브라우저가 그림에 없으면 gzip을 통해 deflate을 사용할 수 있습니까? 예를 들어 압축 파일을 FTP 서버에 업로드하려는 경우.
Xegara

1
또 다른 사소한 차이점은 zlib 래퍼는 6 바이트 대 gzip의 경우 18 바이트라는 것입니다. 따라서 매우 작은 패킷의 경우 12 바이트를 덜 보내는 것이 유리할 수 있습니다. 그러나 결론은 바뀌지 않습니다. 즉, Microsoft가 IIS 서버에 제공 한 내용에서 "deflate"의 의미를 잘못 해석하여 모든 사용자를 지원하기 때문에 gzip 형식을 사용하는 것이 더 쉽습니다.
Mark Adler

그러나 페이로드가 TCP를 사용하여 전송되는 경우 어떻게 페이로드가 손상 될 수 있습니까? TCP의 전체 아이디어는 손상되지 않은 페이로드를 전송하는 것입니다.
user1095108

현대 브라우저는 여전히 deflate 알고리즘의 잘못된 구현 문제로 어려움을 겪고 있거나 지금 사용하는 것이 안전합니까? 답변의이 부분이 여전히 최신입니까?
ihebiheb 2016 년

172

GZip은 단순히 수축 및 체크섬 및 머리글 / 바닥 글입니다. 그러나 어려운 방법을 배웠 으므로 수축 이 더 빠릅니다 .

gzip vs 수축 그래프


13
zlib는 확장을 지원하지 않으며, 그렇게해도 SSE 4.2의 CRC32 명령어는 다항식 1EDC6F41을 사용하고 gzip 형식은 다항식 EDB88320 (완전히 다른 알고리즘)을 사용합니다.
Jack Lloyd

7
수축이 빠르기 때문에 왜 gzip을 사용합니까?
David Murdoch

40
글쎄,이 답변은 잘못된 것으로 밝혀졌습니다 ... 참조 : zoompf.com/blog/2012/02/lose-the-wait-http-compression ... 특히 클라이언트는 헤더가없는 " depret "해석 할 수있는 두 가지 방법이 있습니다 / checksumless 및 zlib 헤더 포함 올바른 수축의 브라우저에서 구현이 잘못되었습니다. 수축은 피해야합니다.
Sam Saffron

4
@sam은 또한 벤치 마크를 다시 실행하고 최신 Intel 칩에서 gzip 1441/692를 얻고 1286/531을 수축시킵니다. 두 번째 숫자는 압축 해제이고 첫 번째 숫자는 압축입니다. 따라서 수축 속도 더 빠릅니다. 벤치 마크가 다르게 표시됩니까? (다른 이유로 유용하지 않을 수 있지만 동의 는 맞습니다 . 수축 속도가 빠릅니다.)
Jeff Atwood

6
@JeffAtwood 그러나 질문이 더 빠르지 않습니까?
Ken

16

실제로 옵션으로 수축을 선택하지 못할 수도 있습니다. mod_deflate 가 deflate를 사용하지 않고 gzip을 사용 하는 것과 반대로 . 따라서 대부분의 포인트가 유효하지만 대부분 관련이 없습니다.


4

gzip은 기본적으로 수축으로 둘러 싸인 헤더이기 때문에 수축과 gzip 사이에는 큰 차이가 없다고 생각합니다 (RFC 1951 및 1952 참조).


3

주된 이유는 디 플레이트가 gzip보다 인코딩 속도가 빠르며 사용량이 많은 서버에서 차이가 발생할 수 있기 때문입니다. 정적 페이지에서는 한 번만 쉽게 사전 압축 할 수 있으므로 다른 질문입니다.


아마도 gzip을 사용하면 모든 데이터를 수집, 저장 및 압축 할 때까지 헤더 전송을 시작할 수 없습니까? (헤더를 생성하려면 체크섬이 필요하기 때문에)
OJW

8
gzip 형식에서, 체크섬은 파일의 끝에옵니다. 특히 모든 것을 유지하지 않고도 처리 될 때 수축 블록 작성을 시작할 수 있습니다.
Jack Lloyd

2

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

많은 작은 파일을 제공하는 경우 압축 및 압축되지 않은 솔루션을 벤치마킹하고로드 테스트하는 것이 좋습니다. 압축을 활성화해도 비용이 절약되지 않는 경우가 있습니다.


궁금해하는 사람은 내 텍스트 파일을 수축하면 30KB에서 10KB로 이동하므로 파일을 절약하려면 파일보다 작아야합니다. 1KB 미만 또는 비슷한 것을 추측하고 있습니다.
hextech

0

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


GZip은 압축 해제시 체크섬을 확인하므로 압축 해제 속도 차이가 있습니다.
Seun Osewa

-1

Apache2 및 deflate 모듈이 이미 설치된 Ubuntu에서 (기본값) deflate gzip 압축을 두 단계로 쉽게 활성화 할 수 있습니다 .

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

그리고 당신은 멀리있어! 내 광고 연결을 통해 게재 된 페이지가 훨씬 빠르게로드되는 것을 발견했습니다.

편집 : @GertvandenBerg의 의견에 따라 이것은 수축하지 않고 gzip 압축을 가능하게합니다.


6
mod_deflate가 혼란스럽게 gzip 압축만을 구현하기 때문에 gzip을 가능하게하는 것을 제외하고 ...
Gert van den Berg

@GertvandenBerg 내 대답을 업데이 트했습니다,하지만 기록을 위해, GZIP는 것입니다 단지 여분의 헤더와 체크섬으로, 폐의
에이단

@aiden yep 그러나 체크섬은 성능에 영향을 미칩니다 ... (그리고 원시 수축은 표준을 준수하지 않습니다)
Gert van den Berg

-4

내가 정확하게 기억한다면

  • gzip은 수축보다 약간 더 압축합니다
  • 수축이 더 효율적입니다

2
gzip은 헤더로 수축됩니다. 그리고 HTTP 1.1 폐의 (또한 폐의 래퍼입니다) ZLIB는 실제로
데이비드 머독
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.