Сжатие HTTP: некоторые внешние скрипты / CSS иногда не распаковываются должным образом - PullRequest
2 голосов
/ 09 июля 2010

Я использую сжатие страниц / ресурсов для повышения производительности веб-сайта.

Я попытался реализовать как хитрый, так и злой HttpCompress, но в итоге получил тот же результат.Это только влияет на Firefox, я тестировал на Chrome и IE.

Что происходит, когда я в первый раз запрашиваю страницу, все внешние ресурсы распаковываются нормально.Во 2-й или 3-й раз страница имеет ошибки, потому что ресурс не распакован.Я получаю символы Unicode, такие как:

������í½`I%&/mÊ{JõJ×àt¡`$Ø@ìÁÍæìiG#)«*ÊeVe]f

(на самом деле они не могут отображаться здесь должным образом)

При проверке страницы с помощью firebug заголовок ответа отображается как:

Cache-Control private

Content-Type text / html;charset = utf-8

Content-Encoding gzip

Сервер Microsoft-IIS / 7.5

X-AspNetMvc-Версия 2.0

X-AspNet-Версия2.0.50727

X-Compressed-By HttpCompress

X-Powered-By ASP.NET Дата Пт, 09 июля

2010 06:51:40 GMT Content-Length2622

Это ясно говорит о том, что ресурс сжимается с помощью gzip.Так что, похоже, что-то идет не так с клиентской стороны?

Я добавил следующие разделы (в соответствующих местах) в web.config:

<sectionGroup name="blowery.web">
  <section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler, blowery.Web.HttpCompress"/>
</sectionGroup>

<blowery.web>
    <httpCompress preferredAlgorithm="gzip" compressionLevel="high">
      <excludedMimeTypes>
        <add type="image/jpeg"/>
        <add type="image/png"/>
        <add type="image/gif"/>
      </excludedMimeTypes>
      <excludedPaths>
        <add path="NoCompress.aspx"/>
      </excludedPaths>
    </httpCompress>
</blowery.web>

<add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule, blowery.web.HttpCompress"/>

Любая помощь?

1 Ответ

1 голос
/ 09 июля 2010

Это проблема, с которой я сталкивался раньше, и проблема в том, что длина содержимого неверна. Почему не правильно? потому что его, вероятно, рассчитать до сжатия.

Если вы устанавливаете Content-Lenght вручную, просто удалите его и позвольте модулю установить его, если он может.

Замечу, что вы используете Blowery компрессию . Вероятно, это ошибка / проблема внутри Blowery. Если вы не можете найти его и исправить, почему бы не использовать сжатие Ms?

@ ptutt если вы используете общий iis, то, возможно, есть сжатие с готовыми настройками, поэтому одно сжатие поверх другого, и вам нужно только удалить свое. Если это проблема, то конечно, длина содержимого ложна, потому что после первого сжатия, второе - сломать его.

Проверьте это , используя этот сайт http://www.pipeboost.com/report.asp, если все ваши страницы по умолчанию готовы к сжатию с помощью iis.

Если не сжато по умолчанию, вы можете сделать это очень легко. На Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    string cTheFile = HttpContext.Current.Request.Path;
    string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);

    if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
    {
        string acceptEncoding = MyCurrentContent.Request.Headers["Accept-Encoding"].ToLower();;

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

Обратите внимание, я просто пишу этот код и не проверял. Мой код немного сложнее, поэтому я просто создаю его простую версию.

Найти больше примеров: http://www.google.com/search?q=Response.Filter+GZipStream

Справка: Сайт ASP.NET иногда зависает и / или показывает нечетный текст вверху страницы во время загрузки на серверах с балансировкой нагрузки

...