Включить IIS7 gzip

Как мне включить IIS7 для gzip статических файлов, таких как js и css, и как я могу проверить, действительно ли IIS7 gziping их перед отправкой клиенту?

Спасибо!

Ответ 1

Конфигурация

Вы можете полностью включить сжатие GZIP в файле Web.config. Это особенно полезно, если вы используете общий хостинг и не можете настроить IIS напрямую, или вы хотите, чтобы ваш config нести все объекты, на которые вы нацелились.

<system.webServer>
  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </staticTypes>
  </httpCompression>
  <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

Тестирование

Чтобы проверить, работает ли сжатие, используйте инструменты в Chrome или Firebug для Firefox и убедитесь, что заголовок HTTP-ответа установлен:

Content-Encoding: gzip

Обратите внимание, что этот заголовок не будет присутствовать, если код ответа 304 (не изменен). Если это произойдет, выполните полное обновление (удерживайте shift или control при нажатии кнопки обновления) и проверьте еще раз.

Ответ 2

Вам нужно включить эту функцию на панели управления Windows:

IIS feature screenshot

Ответ 3

Глобальный Gzip в HttpModule

Если у вас нет доступа к окончательному экземпляру IIS (общий хостинг...), вы можете создать HttpModule, который добавляет этот код к каждому событию HttpApplication.Begin_Request:

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

Тестирование

Kudos, решение не выполняется без тестирования. Мне нравится использовать плагин Firefox " Liveheaders" он отображает всю информацию о каждом HTTP-сообщении между браузером и сервером, включая сжатие, размер файла ( которые можно сравнить с размером файла на сервере).

Ответ 4

под окнами 2012 r2 можно найти здесь:

введите описание изображения здесь

Ответ 5

Если вы используете YSlow с Firebug и анализируете производительность своей страницы, YSlow, безусловно, скажет вам, какие артефакты на вашей странице не являются gzip'd!

Ответ 6

Если вы также пытаетесь gzip динамические страницы (например, aspx), и он не работает, вероятно, потому, что опция не включена (вам нужно установить модуль динамического содержимого с использованием функций Windows):

http://support.esri.com/en/knowledgebase/techarticles/detail/38616

Ответ 7

Мне нужно было добавить функцию в функции Windows, как упоминал Чарли. Для людей, которые не могут найти их в окне 10 или на сервере 2012+, найдите его, как показано ниже. Я немного боролся

Windows 10

введите описание изображения здесь

сервер Windows 2012 R2

введите описание изображения здесь

сервер окон 2016

введите описание изображения здесь

Ответ 8

Попробуйте Firefox с дополнениями Firebug. Я использую его; отличный инструмент для веб-разработчиков.

У меня есть возможность сжатия Gzip, а также в моем IIS7 с помощью web.config.