Назад | Перейти на главную страницу

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

Я пытаюсь поддерживать сжатие 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. Вот заголовки запроса;

Принять: text / html, application / xhtml + xml, application / xml; q = 0.9,/; q = 0,8

Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,3

Принятие кодировки: gzip, deflate, sdch

Accept-Language: en-US, en; q = 0,8

Cache-Control: без кеша

Подключение: keep-alive

Хост: my-website-url

Прагма: без кеширования

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

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

Accept-Ranges: байты

Длина содержимого: 232651

Тип содержимого: приложение / x-javascript

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

ETag: "a69135734a50cc1: 0"

Последнее изменение: понедельник, 1 августа 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 />

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

Похоже, у вас могут быть неправильно установлены разрешения для папки временного сжатия. Вы должны убедиться, что пользователь, установленный вашей установкой IIS (или приложение), имеет разрешение на запись в папку сжатия.

Подробнее здесь

После долгих поисков я наконец нашел то, что заставило сжатие работать на моем 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>
        <serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />
        ...

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

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

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

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

Это работает для меня:

 <urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
<httpCompression noCompressionForRange="false" noCompressionForHttp10="false" noCompressionForProxies="false">
  <dynamicTypes>
    <add mimeType="text/css" enabled="true" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/css" enabled="true" />
  </staticTypes>
 <staticTypes>
    <add mimeType="text/javascript" enabled="true" />
  </staticTypes>
</httpCompression>

Существует также mime-тип text / javascript, и у вас есть только одно приложение. Это была проблема, пока я не включил текст / ...