Сжатие GZip В IIS 7.5 не работает

Я пытаюсь поддерживать сжатие GZip для своих статических файлов в IIS (который должен быть включен по умолчанию, но нет), но пока не работает. Вот раздел под <system.webServer> node внутри файла web.config веб-приложения;

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>

<urlCompression doStaticCompression="true" />

Я попробовал это с Google Chrome. Вот заголовки запроса;

Accept: Текст /HTML, приложение/XHTML + XML, приложение /XML; д = 0,9,/; д = 0,8

Accept-Charset: ISO-8859-1, UTF-8; д = 0,7, *; д = 0,3

Accept-Encoding: GZIP, выкачать, SDCH

Accept-Language: EN-US, ан; д = 0,8

Cache-Control: нет кэша

Connection: Keep-жив

Хост: мой-сайт-URL

Pragma: нет кэша

Пользователь-агент: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, как Gecko) Chrome/12.0.742.122 Safari/534.30

Это заголовки ответов;

Accept-Диапазоны: байты

Content-Length: 232651

Content-Type: применение/х-Javascript

Дата: Чт, 04 авг. 2011 08:58:19 GMT

ETag: "a69135734a50cc1: 0"

Last-Modified: Пн, 01 Авг. 2011 12:56:37 GMT

Сервер: Microsoft-IIS/7.5

X-Powered-By: ASP.NET

Я проверяю файл applicationHost.config и обнаружил некоторые узлы, как показано ниже;

----

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

----

<section name="urlCompression" overrideModeDefault="Allow" />

----

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

----

<urlCompression />

Что мне здесь не хватает?

Ответ 1

После многого поиска я наконец нашел, что получило сжатие, работающее на моем IIS 7.5. Для начала IIS не будет сжимать файл, если он не будет загружен достаточно часто. Это поднимает вопрос "что часто рассматривается IIS?" Ну, по умолчанию 2 раза каждые 10 секунд. Хлоп!

Этот параметр можно изменить в файле web.config, но сначала нужно разблокировать его в applicationHost.config. Вот команды:

Сначала откройте раздел:

C:\Windows\System32\inetsrv\appcmd.exe разблокировать конфигурацию /section:system.webServer/serverRuntime

Разблокированный раздел "system.webServer/serverRuntime" на пути конфигурации "MACHINE/WEBROOT/APPHOST".

Теперь, когда это делается, отредактируйте файл web.config и добавьте элемент serverRuntime:

<? xml version = "1.0" encoding = "UTF-8"? >
  <configuration>
    < system.webServer >
      < server &         ...

В этом случае я установил его, чтобы он ударил файл один раз в 10-часовом периоде. Вы можете отрегулировать значения по мере необходимости. Вот документ, который объясняет элемент serverRuntime:

http://www.iis.net/configreference/system.webserver/serverruntime

Я надеюсь, что это также поможет получить сжатие.

Примечание. Вы также можете установить элемент serverRuntime в файле applicationHost.config, но я решил изменить его в web.config, потому что у нас есть несколько серверов и ферм с различными сайтами, и мне легче для управления этим уровнем гранулярности.

Ответ 2

Одна вещь, которую следует иметь в виду, - это то, что первый клик обычно возвращается несжатым сразу, но закручивает поток, чтобы сжать файл в фоновом режиме, чтобы обслуживать ответ с сжатием для будущих запросов.

Кроме того, вы пытались использовать другой клиент (например, IE)?

Ответ 3

Убедитесь, что вы устанавливаете динамическое сжатие на сервере. Добавление и удаление компонентов в IIS.

Ответ 4

Понадобился время, чтобы понять это. Установка атрибута hourHitThreshold в 1 на system.webServer/serverRuntime node в файле applicationHost.config должно выполняться с трюком, как описано в http://www.iis.net/ConfigReference/system.webServer/serverRuntime.

Вы можете сделать это, выполнив следующую команду в качестве администратора:

%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost

Слово предупреждения - понятие "частого попадания" не похоже на сжатие. Я не знаю, есть ли другие последствия в результате этого!

Ответ 5

Следующие конфигурации работали для меня. Просто замените раздел httpCompression в файле applicationHost.config приведенным ниже и перезапустите IIS. Что это!!!

  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
    staticCompressionDisableCpuUsage="95" staticCompressionEnableCpuUsage="60"
    dynamicCompressionDisableCpuUsage="95" dynamicCompressionEnableCpuUsage="50">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
    <dynamicTypes>
      <add mimeType="text/*" enabled="true" />
      <add mimeType="message/*" enabled="true" />
      <add mimeType="application/x-javascript" enabled="true" />
      <add mimeType="*/*" enabled="false" />
      <add mimeType="application/json" enabled="true" />
      <add mimeType="application/json; charset=utf-8" enabled="true" />
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true" />
      <add mimeType="message/*" enabled="true" />
      <add mimeType="application/x-javascript" enabled="true" />
      <add mimeType="application/atom+xml" enabled="true" />
      <add mimeType="application/xaml+xml" enabled="true" />
      <add mimeType="application/json" enabled="true" />
      <add mimeType="application/json; charset=utf-8" enabled="true" />
      <add mimeType="*/*" enabled="false" />
    </staticTypes>
  </httpCompression>

После настройки этого параметра я получил ниже заголовки в ответ, который указывает, что данные сжаты с использованием сжатия gzip

Cache-Control → no-cache
Content-Encoding → gzip
Content-Length → 4202
Content-Type → application/json; charset=utf-8
Date → Wed, 22 Jul 2015 07:40:17 GMT
Expires → -1
Pragma → no-cache
Vary → Accept-Encoding
X-Powered-By → ASP.NET 

Вышеуказанная конфигурация предназначена для всего IIS. Если вы хотите настроить это для одного веб-сайта, замените

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

с

<section name="httpCompression" overrideModeDefault="Allow" />

в applicationHost.config и вместо замены раздела httpCompression в applicationHost.config добавьте его под тегом system.webServer в web.config вашего сайта.

Кроме того, убедитесь, что вы указали правильный тип MIME для своих данных. В моем случае это было в JSON, поэтому я использовал ниже конфигурации

<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />

Ответ 6

"Конфигурация system.webServer не позволяет httpCompression на уровне веб-сайта" https://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12

Почему вы используете файлы конфигурации? Просто попробуйте создать новый фиктивный веб-сайт с некоторым txt файлом более 2700 байт. Также вы можете попробовать установить динамический модуль сжатия и включить его для сервера ant этого фиктивного сайта.

Ответ 7

Мы обнаружили, что наш сайт Azure поражал его максимальным использованием ЦП из-за того, что он работает с большим ресурсом WebJob. Мы пробовали все настройки выше и ничего не работали. Затем мы проверили использование ресурсов процессора и обнаружили, что он равен 80%+. При загрузке процессора 80% gzip перестает работать!