programing

GZIP과 DEFLATE 압축의 장점은 무엇입니까?

instargram 2023. 8. 20. 10:14
반응형

GZIP과 DEFLATE 압축의 장점은 무엇입니까?

나는 asp에 웹사이트가 있습니다.NET 4(C#).

웹 사이트 대역폭을 최적화하는 방법을 찾고 있습니다.

GZIP(DEFLATE 기반)은 데이터를 추가하기 때문에 DEFLATE가 GZIP보다 빠르고 작다는 기사를 많이 읽었습니다.

bing.com 과 google.com 의 헤더를 확인해보니 둘 다 GZIP 인코딩 데이터를 보내는 것 같습니다.

제가 읽은 것이 사실이라고 가정하면, 저는 이 경우 GZIP의 장점이 그립습니다.그래서 저는 DEFLATE보다 GZIP을 선호하는 데는 타당한 이유가 있을 것이라고 생각합니다.

질문:

  • GZIP은 제가 모르는 DEFLATE보다 어떤 이점을 제공합니까?
  • 주요 검색 엔진이 GZIP을 사용하는 이유에 대한 단서가 있습니까?

다음은 DEFLATE(Global.asax)를 보내는 데 사용하는 코드입니다.

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {

        HttpApplication app = sender as HttpApplication;
        string acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;

        if (!(app.Context.CurrentHandler is Page ||
            app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
            app.Request["HTTP_X_MICROSOFTAJAX"] != null)
            return;

        if (acceptEncoding == null || acceptEncoding.Length == 0)
            return;

        acceptEncoding = acceptEncoding.ToLower();

        if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        {
            // defalte
            app.Response.Filter = new DeflateStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
        else if (acceptEncoding.Contains("gzip"))
        {
            // gzip
            app.Response.Filter = new GZipStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");
        }
    }

Gzip은 deflate + 몇 개의 헤더와 체크섬이기 때문에 더욱 안정적입니다.즉, gzip은 deflate이고, 추가 헤더와 체크섬입니다.deflate는 gzip의 일부인 dler32로 확인됩니다.gzip 페이로드가 DEFLATE로 압축된 페이로드이기 때문입니다.

정보 압축 풀기

Gzip 정보

gzip 파일/스트림에는 다음이 포함됩니다.

- a 10-byte header, containing a magic number, a version number and a time stamp
- optional extra headers, such as the original file name,
- a body, containing a DEFLATE-compressed payload
- an 8-byte footer, containing a CRC-32 checksum and the length of the original uncompressed data

다른 대답은 대부분 틀렸습니다.의 "디플레이터" 값은Content-EncodingHTTP 헤더는 실제로 ZLIB를 의미하는 잘못된 이름입니다.따라서 둘 다 체크섬과 압축된 내용이 동일합니다.머리글/바닥글만 다르고 사용하는 체크섬만 다릅니다.

gzip "deflate"(zlib)
머리글 크기 10바이트 2바이트
바닥글 크기 4바이트 0
체크섬 CRC32 아들러-32
압축 알고리즘 공기 빼기 공기 빼기
사양 RFC 1952 RFC 1950

이전에는 초기 Microsoft IIS 서버가 zlib 데이터 대신 원시 디플레이트 데이터를 전송했기 때문에 "디플레이트"가 문제가 있었습니다(https://stackoverflow.com/a/9186091/1218408) 참조).이 문제를 해결하기 위해 gzip을 사용하는 것이 일반화되었습니다.

일반적으로 Adler-32가 CRC32보다 계산 속도가 빠르기 때문에 deflate가 약간 더 빠르지만 대부분의 시간은 실제로 데이터를 압축하고 체크섬을 계산하지 않는 데 사용됩니다.

언급URL : https://stackoverflow.com/questions/7243705/what-is-the-advantage-of-gzip-vs-deflate-compression

반응형