Сжатие GZip на IIS 7.5 не работает - PullRequest
54 голосов
/ 04 августа 2011

Я пытаюсь поддерживать сжатие GZip для моих статических файлов в IIS (которое должно быть включено по умолчанию, но не включено), но пока не работает Вот раздел под узлом <system.webServer> внутри файла 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: нет кэша

Подключение: держать-жив

Ведущий: мой-сайт-адрес

Pragma: нет кэша

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

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

Accept-Ranges: байт

Content-Length: 232651

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

Дата: четверг, 04 августа 2011 г. 08:58:19 GMT

ETag: "a69135734a50cc1: 0"

Дата последнего изменения: пн, 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 />

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

Ответы [ 7 ]

40 голосов
/ 26 марта 2013

После долгих поисков я наконец-то обнаружил, что работает на моем 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"?>



...

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

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

Надеюсь, это поможет вашему сжатию работать.

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

28 голосов
/ 06 августа 2011

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

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

13 голосов
/ 13 февраля 2013

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

7 голосов
/ 22 июля 2015

У меня работают следующие конфигурации. Просто замените раздел 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 голосов
/ 02 апреля 2012

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

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

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

Слово предупреждения - концепция «частого попадания» не кажется специфической для сжатия. Я понятия не имею, есть ли другие последствия в результате установки этого!

1 голос
/ 07 октября 2016

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

1 голос
/ 13 августа 2011

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

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

...