Веб-приложение Azure не использует сжатие GZip

Я использовал WebPageTest для проверки производительности своего веб-приложения Azure (ASP.Net vNext Web API / Angular). Я получил F как за "Сжатие передачи", так и за "Кэширование статического содержимого".

После поиска в StackOverflow и Google я добавил в свой web.config следующее:

<urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <httpCompression>
      <dynamicTypes>
        <clear />
        <remove mimeType="*/*" />
        <add enabled="true" mimeType="text/*"/>
        <add enabled="true" mimeType="message/*"/>
        <add enabled="true" mimeType="application/x-javascript"/>
        <add enabled="true" mimeType="application/javascript"/>
        <add enabled="true" mimeType="application/json"/>
        <add enabled="false" mimeType="*/*"/>
        <add enabled="true" mimeType="application/atom+xml"/>
        <add enabled="true" mimeType="application/atom+xml;charset=utf-8"/>
      </dynamicTypes>
      <staticTypes>
        <clear />
        <remove mimeType="*/*" />
        <add enabled="true" mimeType="text/*"/>
        <add enabled="true" mimeType="message/*"/>
        <add enabled="true" mimeType="application/javascript"/>
        <add enabled="true" mimeType="application/atom+xml"/>
        <add enabled="true" mimeType="application/xaml+xml"/>
        <add enabled="true" mimeType="application/json"/>
        <add enabled="false" mimeType="*/*"/>
      </staticTypes>
    </httpCompression>

а также

<staticContent>
      <!-- Set expire headers to 30 days for static content-->
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>

После повторного развертывания моего веб-приложения я повторно запустил тест, и я все еще получаю F за оба из них. Несмотря на то, что я добавил эти параметры в web.config, похоже, что веб-приложение Azure их не учитывает.

Кроме того, я обнаружил, что некоторые уровни веб-приложений не допускают сжатие, но я работаю на S2, и я подтвердил, что он разрешает сжатие.

Любая помощь будет оценена по достоинству!

Спасибо!


person jkruer01    schedule 30.11.2015    source источник


Ответы (2)


Сжатие gzip включено по умолчанию для веб-приложений Azure. Вы можете увидеть правила на своих сайтах LocalSiteRoot / Config / applicationhost.config. Заголовки ответов (которые можно легко сделать с помощью инструментов разработчика) должны подтвердить, что используется gzip. Возможно, что один из ресурсов, загружаемых вашим сайтом, не сжат, и это приводит к сбою WebPageTest. Я бы посмотрел на захват сети и заголовки ответов и посмотрел, сможете ли вы найти нарушающие ресурсы, если вас это беспокоит.

Чтобы перейти в корень локального сайта, вы можете использовать FTP или перейти на свой сайт SCM по адресу https: //.scm.azurewebsites.net/DebugConsole и затем щелкнуть значок глобуса. введите описание изображения здесь

Также я подозреваю, что ваши 2 файла javascript не сжимаются, поскольку заголовок Content-Type не заполняется, поэтому правило не захватывает его, потому что оно не распознает mimetype.

person theadriangreen    schedule 01.12.2015
comment
Есть 2 файла, которые не отправляются в сжатом виде. Оба являются файлами javascript, обслуживаемыми моим веб-приложением Azure. Когда я открываю инструменты разработчика, я смотрю на файлы javascript, которые обслуживаются из Google CDN, у них есть заголовок ответа Content Encoding = gzip. Однако, когда я смотрю на два файла javascript, обслуживаемых моим веб-приложением Azure, ни у одного из них нет этого заголовка ответа. - person jkruer01; 01.12.2015
comment
Как мне получить доступ к LocalSiteRoot / Config / applicationhost.config? Я нажимаю свое веб-приложение на портале Azure, а затем нажимаю «Все параметры». Я не вижу ничего, что говорит о LocalSiteRoot или config. - person jkruer01; 01.12.2015
comment
Я отредактировал свой ответ, чтобы показать, как получить доступ к LocalSiteRoot, и добавил, в чем, по моему мнению, может быть проблема. - person theadriangreen; 01.12.2015
comment
Gzip по умолчанию также будет работать даже в новых приложениях ASP.NET 5 (dnx), которые работают в Kestrel за IIS. Вам по-прежнему нужен статический обработчик файлов в Kestrel, но на обратном пути IIS обнаружит его как статический контент и заархивирует его или что-то еще, что вы укажете в web.config (также работает с динамическим содержимым) - person Ilya Chernomordik; 05.01.2016
comment
Я следил за вашим сообщением и пытался сжать простую страницу html без каких-либо скриптов, но у меня проблема в лазурном, здесь мой вопрос. - person Shaiju T; 09.08.2016

Просто для резервного копирования @theadriangreen здесь - это будет проблема с заголовком. Я обнаружил, что добавление типов в web.config ненадежно.

Вместо этого вам нужно отредактировать файл applicationHost.config, хранящийся в самой темной части лазурного. Самый простой способ сделать это - установить расширение IIS Manager на портале Azure или в Kudu. Доступ к Kudu можно получить через .scm.azurewebsites.net.

Там вы можете отредактировать файл, и он сохранит для вас xdt, который после перезапуска приложения вы должны обнаружить, что xdt применяется.

В качестве альтернативы вы можете просто добавить applicationHost.xdt в корень своего приложения, и все готово. Вот образец.

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/json;charset=utf-8" enabled="true" xdt:Transform="InsertAfter(/configuration/system.webServer/httpCompression/dynamicTypes/add[(@mimeType='application/json')])" />
      </dynamicTypes>
    </httpCompression>
  </system.webServer>
</configuration>

Использованная литература:-

person Martin Clarke    schedule 06.11.2016