В чем преимущество сжатия GZIP перед DEFLATE? - PullRequest
22 голосов
/ 30 августа 2011

У меня есть веб-сайт в asp.NET 4 (C #).

Я пытаюсь найти способ лучше оптимизировать пропускную способность для моего сайта.

Я прочитал много статей, в которых говоритсяэтот DEFLATE быстрее и меньше, чем GZIP, потому что GZIP (на основе DEFLATE) добавляет некоторые дополнительные данные.

Проверка заголовков bing.com и google.com кажется, что они оба отправляют данные в кодировке GZIP.

Предполагая, что я прочитал правду, я упускаю преимущество GZIP в этом случае.Поэтому я подозреваю, что должна быть веская причина предпочесть GZIP DEFLATE.

Мои вопросы:

  • Предоставляет ли 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");
        }
    }

1 Ответ

25 голосов
/ 30 августа 2011

Gzip более надежен, потому что он дефлятированный, плюс несколько заголовков и контрольная сумма. Другими словами, gzip - это deflate, дополнительные заголовки и контрольная сумма. Deflate проверяется с помощью adler32, который также является частью gzip. Поскольку полезная нагрузка gzip является полезной нагрузкой со сжатием DEFLATE.

Deflate info

Gzip info

файл / поток 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...