Схема схемы <>

Общие сведения

Элемент <scheme><httpCompression> элемента задает следующие параметры для схем сжатия ZIP-файла GNU (Gzip) и Deflate в службах IIS 7:

  • Атрибуты name и DLL соответственно указывают имя и библиотеку DLL поставщика схемы сжатия. IIS 7 поддерживает сжатие Gzip и Deflate, и обе схемы сжатия в настоящее время реализованы в %windir%\system32\inetsrv\gzip.dll.

  • Атрибут doStaticCompression указывает, включено ли статическое сжатие для схемы сжатия, указанной атрибутом name . Если параметру doStaticCompression присвоено значение true , то статическое содержимое будет сжиматься по запросу клиента. Если статическое сжатие включено, каждый запрос статического содержимого, содержащего заголовок "Accept-Encoding: gzip" или "Accept-Encoding: deflate", вызывает сжатие содержимого при условии, что в службах IIS включена схема сжатия, указанная в заголовке. Если запрос не содержит этого заголовка или заголовок указывает схему сжатия, которая не включена в IIS, содержимое не сжимается.

    Если служба IIS определяет, что ответ должен быть сжат, iis проверяет каталог сжатия, заданный <атрибутом каталога элемента httpCompression>. Если в каталоге обнаружена новая, сжатая версия статического файла, она отправляется в клиентский браузер. Если новая, сжатая версия файла не найдена, а сжатие по запросу включено с помощью атрибута dynamicCompressionBeforeCache элемента urlCompression>, iis отправляет запрошенный файл в несжатой форме и добавляет этот файл в очередь фонового сжатия.<

  • Атрибут doDynamicCompression указывает, включено ли динамическое сжатие для схемы сжатия, указанной атрибутом name . Если параметру doDynamicCompression присвоено значение true , то динамическое содержимое будет сжиматься по запросу клиента. Если динамическое сжатие включено, каждый запрос динамического содержимого, содержащего заголовок "Accept-Encoding: gzip" или "Accept-Encoding: deflate", вызывает сжатие содержимого, если в iis включена схема сжатия, указанная в заголовке. Если запрос не содержит этого заголовка или заголовок указывает схему сжатия, которая не включена в IIS, содержимое не сжимается.

    Примечание

    Так как динамическое содержимое по определению всегда изменяется, СЛУЖБЫ IIS не кэшируют сжатые версии динамического содержимого. Динамическое сжатие потребляет значительное время ЦП и ресурсы памяти и должно использоваться только на серверах с медленными сетевыми подключениями и временем ЦП.

  • Атрибуты dynamicCompressionLevel и staticCompressionLevel задают уровни сжатия для схем сжатия, когда IIS сжимают динамическое или статическое содержимое соответственно. Более низкие уровни сжатия создают немного большие сжатые файлы, но с меньшим общим влиянием на ресурсы ЦП и памяти. Более высокие уровни сжатия обычно приводят к меньшему размеру сжатых файлов, но с более высокой загрузкой ЦП и памяти.

Примечание

По умолчанию в IIS 7 доступна только схема сжатия Gzip. Чтобы включить схему сжатия Deflate программным способом, см. раздел Примеры кода этого документа.

Совместимость

Версия Примечания
IIS 10.0 Элемент <scheme> не был изменен в IIS 10.0.
IIS 8,5 Элемент <scheme> не был изменен в IIS 8.5.
IIS 8,0 Элемент <scheme> не был изменен в IIS 8.0.
IIS 7,5 Элемент <scheme> не был изменен в IIS 7.5.
IIS 7.0 Элемент <scheme> элемента появился <httpCompression> в IIS 7.0.
IIS 6,0 Элемент <scheme> заменяет следующие свойства метабазы IIS 6.0:
  • HcCompressionDll
  • HcDoDynamicCompression
  • HcDoStaticCompression
  • HcDynamicCompressionLevel

Настройка

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

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
  3. В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
  4. На странице Роли сервера разверните узел Веб-сервер (IIS),Веб-сервер, Затем — Производительность, а затем выберите Сжатие статического содержимого и (или) Динамическое сжатие содержимого. Щелкните Далее.
    Снимок экрана: развернутая область
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, Веб-службы, Функции производительности, а затем выберите Динамическое сжатие содержимого и (или) Сжатие статического содержимого.
    Снимок экрана: панель
  4. Нажмите кнопку ОК.
  5. Щелкните Закрыть.

Windows Server 2008 или Windows Server 2008 R2

  1. На панели задач нажмите кнопку Пуск, выберите Администрирование, а затем диспетчер сервера.
  2. В области иерархии диспетчер сервера разверните узел Роли и выберите Веб-сервер (IIS).
  3. На панели Веб-сервер (IIS) прокрутите страницу до раздела Службы ролей и щелкните Добавить службы ролей.
  4. На странице Выбор служб ролеймастера добавления служб ролей выберите Динамическоесжатие содержимого , если требуется установить динамическое сжатие, и Сжатие статического содержимого , если требуется установить статическое сжатие, а затем нажмите кнопку Далее.
    Снимок экрана: страница
  5. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  6. На странице Результаты нажмите кнопку Закрыть.

Windows Vista или Windows 7

  1. На панели задач нажмите кнопку Пуск, а затем панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, затем Службы Интернета, а затем Функции производительности.
  4. Выберите Http Compression Dynamic (Динамическое сжатие HTTP), если требуется установить динамическое сжатие, и Сжатие статического содержимого , если требуется установить статическое сжатие.
    Снимок экрана: страница
  5. Нажмите кнопку ОК.

Инструкции

Отсутствует пользовательский интерфейс для настройки схемы сжатия для IIS 7. Примеры установки схемы сжатия программными средствами см. в разделе Примеры кода этого документа.

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

Атрибуты

Атрибут Описание
dll Обязательный строковый атрибут.

Указывает полный путь к файловой системе и имя файла библиотеки DLL сжатия, связанной со схемой сжатия. Служба веб-публикации (служба WWW) должна быть перезапущена, прежде чем изменения этого атрибута вступают в силу.
doDynamicCompression Дополнительный логический атрибут.

Указывает, сжимаются ли ответы на запросы динамического содержимого, например скрипты в расширениях ACTIVE Server Pages (ASP) и ISAPI. Если это значение изменяется на уровне отдельной схемы сжатия, служба WWW должна быть перезапущена до того, как изменение вступит в силу.

Значение по умолчанию — true.
doStaticCompression Дополнительный логический атрибут.

Указывает, сжимает ли СЛУЖБЫ IIS ответы на запросы статического содержимого. Поскольку этот атрибут не может быть унаследован, ему должно быть присвоено значение true как на глобальном уровне (<httpCompression>), так и на уровне отдельной схемы, если атрибуту name присвоено значение Gzip. Если это значение изменяется на уровне отдельной схемы сжатия, служба WWW должна быть перезапущена до того, как изменение вступит в силу.

Примечание: Хранилище статического сжатия должно находиться в разделе диска или удаленном общем ресурсе, отформатированного с помощью NTFS. Если хранилище файлов не является NTFS, статическое сжатие отключено. По соображениям безопасности сжатые ответы не будут обслуживаться из хранилища кэша FAT.

Значение по умолчанию — true.
dynamicCompressionLevel Необязательный атрибут uint.

Задает уровень сжатия для схемы сжатия при сжатии динамического содержимого. Уровни варьируются от 0 (самый низкий уровень сжатия и самая низкая загрузка ЦП) до 10 (самый высокий уровень сжатия и максимальная загрузка ЦП). Служба WWW должна быть перезапущена, прежде чем изменения этого атрибута вступают в силу.

Примечание: Так как динамическое сжатие потребляет значительное время ЦП и ресурсы памяти, используйте его только на серверах с медленными сетевыми подключениями и временем ЦП. Сжатые статические ответы можно кэшировать и, следовательно, не влиять на ресурсы ЦП, как динамические ответы.

Значение по умолчанию — 0.
name Обязательный строковый атрибут.

Указывает имя схемы сжатия. Например, Gzip или Deflate.
staticCompressionLevel Необязательный атрибут uint.

Задает уровень сжатия для схемы сжатия при сжатии статического содержимого. Уровни варьируются от 0 (самый низкий уровень сжатия и самая низкая загрузка ЦП) до 10 (самый высокий уровень сжатия и максимальная загрузка ЦП). 0 означает, что сжатие отключено. Служба WWW должна быть перезапущена, прежде чем изменения этого атрибута вступают в силу.

Значение по умолчанию — 7.

Дочерние элементы

Элемент Описание
remove Необязательный элемент.

Удаляет ссылку на схему сжатия HTTP из коллекции схем сжатия HTTP.
clear Необязательный элемент.

Удаляет все ссылки на схемы сжатия HTTP из коллекции схем сжатия HTTP.

Образец конфигурации

Следующий элемент по умолчанию <httpCompression> настраивается в файле ApplicationHost.config в IIS 7. Этот раздел конфигурации наследует параметры конфигурации по умолчанию, если не используется <clear> элемент .

<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>

Пример кода

В следующих примерах кода схема сжатия deflate добавляется в IIS 7.

AppCmd.exe

appcmd.exe set config -section:system.webServer/httpCompression /+"[name='deflate',doStaticCompression='True',doDynamicCompression='True',dll='%Windir%\system32\inetsrv\gzip.dll']" /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра apphostфиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection httpCompressionSection = config.GetSection("system.webServer/httpCompression");
         ConfigurationElementCollection httpCompressionCollection = httpCompressionSection.GetCollection();

         ConfigurationElement schemeElement = httpCompressionCollection.CreateElement("scheme");
         schemeElement["name"] = @"deflate";
         schemeElement["doStaticCompression"] = true;
         schemeElement["doDynamicCompression"] = true;
         schemeElement["dll"] = @"%Windir%\system32\inetsrv\gzip.dll";
         httpCompressionCollection.Add(schemeElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim httpCompressionSection As ConfigurationSection = config.GetSection("system.webServer/httpCompression")
      Dim httpCompressionCollection As ConfigurationElementCollection = httpCompressionSection.GetCollection

      Dim schemeElement As ConfigurationElement = httpCompressionCollection.CreateElement("scheme")
      schemeElement("name") = "deflate"
      schemeElement("doStaticCompression") = True
      schemeElement("doDynamicCompression") = True
      schemeElement("dll") = "%Windir%\system32\inetsrv\gzip.dll"
      httpCompressionCollection.Add(schemeElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var httpCompressionSection = adminManager.GetAdminSection("system.webServer/httpCompression", "MACHINE/WEBROOT/APPHOST");
var httpCompressionCollection = httpCompressionSection.Collection;

var schemeElement = httpCompressionCollection.CreateNewElement("scheme");
schemeElement.Properties.Item("name").Value = "deflate";
schemeElement.Properties.Item("doStaticCompression").Value = true;
schemeElement.Properties.Item("doDynamicCompression").Value = true;
schemeElement.Properties.Item("dll").Value = "%Windir%\\system32\\inetsrv\\gzip.dll";
httpCompressionCollection.AddElement(schemeElement);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set httpCompressionSection = adminManager.GetAdminSection("system.webServer/httpCompression", "MACHINE/WEBROOT/APPHOST")
Set httpCompressionCollection = httpCompressionSection.Collection

Set schemeElement = httpCompressionCollection.CreateNewElement("scheme")
schemeElement.Properties.Item("name").Value = "deflate"
schemeElement.Properties.Item("doStaticCompression").Value = True
schemeElement.Properties.Item("doDynamicCompression").Value = True
schemeElement.Properties.Item("dll").Value = "%Windir%\system32\inetsrv\gzip.dll"
httpCompressionCollection.AddElement(schemeElement)

adminManager.CommitChanges()