Включить IIS7 GZIP


229

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

Ответы:


243

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

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

<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 или элемент управления, пока вы нажимаете кнопку обновления) и проверьте еще раз.


@DenNukem, прости, я не совсем уверен. Я проверял это только на IIS7. Кто-нибудь еще хочет прокомментировать?
Дрю Ноакс

21
Осторожно - это работает, только если раздел httpCompression в applicationhost.config разблокирован. По умолчанию раздел заблокирован для изменений, поэтому переопределение в web.config не работает. Потратил на это несколько часов. stackoverflow.com/a/2894695/245460 , см. комментарий ниже статьи.
Карел Краль

Убедитесь, что установлена ​​функция веб-роли, а также из MSDN: «Вы также можете добавить подстановочные записи для типов MIME. Однако вы можете установить типы MIME только для уровня веб-сервера. Например, чтобы включить статическое сжатие для все типы MIME для веб-сайта по умолчанию, сначала добавьте подстановочные знаки для типов MIME для уровня сервера, а затем включите статическое сжатие для веб-сайта по умолчанию. "
Люк Пуплет

12
Динамическое сжатие также не будет работать, если на сервере не установлен модуль динамического сжатия содержимого (доступен через установщик веб-платформы). Это понадобится вам, если вы используете пакеты Css / Js.
Отметить

только CSS сжимается, .jsне так. Также попробовал добавить application/x-javascript. Используя вместе с tomcat, отсюда убрал directoryпараметр.
coding_idiot

58

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

Скриншот функции IIS


16
В Windows Server 2008 R2 это расположено в Диспетчере серверов> Роли> Веб-сервер (IIS). Нажмите «Добавить службы ролей» в разделе «Роли». «Сжатие динамического содержимого» указано в заголовке «Производительность».
Джонатан Литтл

37

Глобальный 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;

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

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


3
Я использую виртуальный хостинг, и мне не нужно было писать код, чтобы включить сжатие вывода GZIP. Это было возможно только через Web.config. Смотрите мой ответ: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Дрю Ноакс

2
Я поместил первые три строки в начало одной страницы aspx, которую я хотел сжать, и это работает! Спасибо! Это намного меньше хлопот, чем любой другой подход, и он работает на IIS 6 для меня.
DenNukem

1
Это абсолютно способ сделать это.
Мэтью Джеймс Дэвис


2

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

Windows 10

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

Windows Server 2012 R2

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

оконный сервер 2016

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


1

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


1

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

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




Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.