Partilhar via


Esquema <scheme>

Visão geral

O elemento <scheme> do elemento <httpCompression> especifica as seguintes configurações para os esquemas de compactação GNU zip (Gzip) e Deflate nos Serviços de Informações da Internet (IIS) 7:

  • O nome name e dll respectivamente especificam o nome e a DLL do provedor de um esquema de compactação. O IIS 7 dá suporte à compactação Gzip e Deflate, e ambos os esquemas de compactação estão atualmente implementados em %windir%\system32\inetsrv\gzip.dll.

  • O atributo doStaticCompression especifica se a compactação estática está habilitada para o esquema de compactação especificado pelo atributo name. Definir doStaticCompression para true especifica que o conteúdo estático será compactado quando solicitado por um cliente. Se a compactação estática estiver habilitada, cada solicitação de conteúdo estático que contenha o cabeçalho “Accept-Encoding: gzip” ou “Accept-Encoding: deflate” faz com que o conteúdo seja compactado, desde que o esquema de compactação especificado no cabeçalho seja habilitado no IIS. Se a solicitação não contiver esse cabeçalho ou o cabeçalho especificar um esquema de compactação que não está habilitado no IIS, o conteúdo não será compactado.

    Se o IIS determinar que a resposta deve ser compactada, o IIS verificará o diretório de compactação especificado pelo diretório atributo do elemento <httpCompression>. Se uma versão nova e compactada do arquivo estático for encontrada no diretório, ela será enviada para o navegador do cliente. Se uma versão nova e compactada do arquivo não for encontrada e a compactação sob demanda estiver habilitada com atributo dynamicCompressionBeforeCache do elemento <urlCompression>, o IIS enviará o arquivo solicitado de forma não compactada e adicionará esse arquivo à fila de compactação em segundo plano.

  • O atributo doDynamicCompression especifica se a compactação dinâmica está habilitada para o esquema de compactação especificado pelo atributo name. Definir doDynamicCompression para true especifica que o conteúdo dinâmico será compactado quando solicitado por um cliente. Se a compactação dinâmica estiver habilitada, cada solicitação de conteúdo dinâmico que contenha o cabeçalho “Accept-Encoding: gzip” ou “Accept-Encoding: deflate” faz com que o conteúdo seja compactado, desde que o esquema de compactação especificado no cabeçalho seja habilitado no IIS. Se a solicitação não contiver esse cabeçalho ou o cabeçalho especificar um esquema de compactação que não está habilitado no IIS, o conteúdo não será compactado.

    Observação

    Como o conteúdo dinâmico está sempre mudando por definição, o IIS não armazena em cache versões compactadas de conteúdo dinâmico. A compactação dinâmica consome um tempo de CPU considerável e recursos de memória e deve ser usada apenas em servidores com conexões de rede lentas e tempo de CPU de sobra.

  • Os atributos dynamicCompressionLevel e staticCompressionLevel especificam os níveis de compactação para os esquemas de compactação quando o IIS está, respectivamente, compactando conteúdo dinâmico ou estático. Níveis de compactação mais baixos produzem arquivos compactados ligeiramente maiores, mas com menor impacto geral sobre os recursos de CPU e memória. Níveis de compactação mais altos geralmente resultam em arquivos compactados menores, mas com maior uso de CPU e memória.

Observação

Por padrão, somente o esquema de compactação Gzip está disponível no IIS 7. Para habilitar o esquema de compactação Deflate programaticamente, consulte a seção Exemplos de código deste documento.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <scheme> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <scheme> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <scheme> não foi modificado no IIS 8.0.
IIS 7.5 O elemento <scheme> não foi modificado no IIS 7.5.
IIS 7.0 O elemento <scheme> do elemento <httpCompression> foi introduzido no IIS 7.0.
IIS 6,0 O elemento <scheme> substitui as seguintes propriedades de metabase dos IIS 6.0:
  • HcCompressionDll
  • HcDoDynamicCompression
  • HcDoStaticCompression
  • HcDynamicCompressionLevel

Instalação

A compactação HTTP geralmente está disponível na instalação padrão do IIS 7 e posterior. No entanto, somente a compactação estática é instalada por padrão. Para instalar a compactação estática ou dinâmica, use as etapas a seguir.

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.
  2. No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.
  4. Na página Funções de Servidor, expanda Servidor Web (IIS), expanda Servidor Web, expanda Desempenho e selecione Compactação de Conteúdo Estático e/ou Compactação de Conteúdo Dinâmico. Clique em Avançar.
    Captura de tela do painel Desempenho expandido com Compactação de conteúdo estático selecionada e Compactação de conteúdo dinâmico realçada.
  5. Na página Selecionar recursos, clique em Avançar.
  6. Na página Confirmar seleções de instalação, clique em Instalar.
  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
  3. Expanda Serviços de Informações da Internet, expanda Serviços da World Wide Web, expanda Recursos de Desempenho e selecione Compactação de Conteúdo Dinâmico e/ou Compactação de Conteúdo Estático.
    A captura de tela mostra o painel Recursos de Desempenho em Ativar ou desativar recursos do Windows expandido e a Compactação de Conteúdo Estático realçada.
  4. Clique em OK.
  5. Clique em Fechar.

Windows Server 2008 R2 ou Windows Server 2008

  1. Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do Servidor.
  2. No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).
  3. No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.
  4. Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, selecione Compactação de Conteúdo Dinâmico se quiser instalar a compactação dinâmica e Compactação de Conteúdo Estático se quiser instalar a compactação estática e clique em Avançar.
    A captura de tela mostra a página Selecionar Serviços de Função com o nó Desempenho expandido e a Compactação de Conteúdo Dinâmico realçada.
  5. Na página Confirmar Seleções de Instalação, clique em Instalar.
  6. Na página Resultados , clique em Fechar.

Windows Vista ou Windows 7

  1. Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar Recursos do Windows.
  3. Expanda Serviços de Informações da Internet e, em seguida, Serviços World Wide Web e, em seguida, Recursos de Desempenho.
  4. Selecione Compactação Dinâmica Http, se desejar instalar a compactação dinâmica, e Compactação de Conteúdo Estático, se desejar instalar a compactação estática.
    Captura de tela da página Ativar ou desativar recursos do Windows mostrando o nó Recursos de desempenho expandido e H T T P Common Dynamics selecionado.
  5. Clique em OK.

Instruções

Não há nenhuma interface do usuário para definir o esquema de compactação para o IIS 7. Para obter exemplos de como definir o esquema de compactação programaticamente, veja a seção Exemplos de código desse documento.

Configuração

Atributos

Atributo Descrição
dll Atributo de cadeia de caracteres obrigatório.

Especifica o caminho do sistema de arquivos totalmente qualificado e o nome do arquivo da DLL de compactação associada ao esquema de compactação. O serviço WWW (Serviço de Publicação na World Wide Web) deve ser reiniciado antes que qualquer alteração nesse atributo entre em vigor.
doDynamicCompression Atributo booliano opcional.

Especifica se as respostas a solicitações de conteúdo dinâmico, como scripts nas extensões ASP (Páginas do Active Server) e ISAPI, são compactadas. Se esse valor for alterado no nível do esquema de compactação individual, o serviço WWW deverá ser reiniciado antes que a alteração entre em vigor.

O valor padrão é true.
doStaticCompression Atributo booliano opcional.

Especifica se o IIS compacta respostas a solicitações de conteúdo estático. Como esse atributo não pode ser herdado, ele deve ser definido como verdadeiro no nível global (<httpCompression>) e no nível de esquema individual se o atributo name estiver definido como Gzip. Se esse valor for alterado no nível do esquema de compactação individual, o serviço WWW deverá ser reiniciado antes que a alteração entre em vigor.

Observação: o armazenamento de compactação estática precisa estar localizado em uma partição de disco ou compartilhamento remoto formatado com NTFS. Se o armazenamento de arquivos não for NTFS, a compactação estática será desabilitada. Por motivos de segurança, nenhuma resposta compactada será servida de um armazenamento de cache FAT.

O valor padrão é true.
dynamicCompressionLevel Atributo uint opcional.

Especifica o nível de compactação para o esquema de compactação quando o conteúdo dinâmico está sendo compactado. Os níveis variam de 0 (nível de compactação mais baixo e menor uso de CPU) a 10 (nível de compactação mais alto e maior uso de CPU). O serviço WWW deve ser reiniciado antes que as alterações nesse atributo entrem em vigor.

Observação: como a compactação dinâmica consome recursos consideráveis de tempo e memória da CPU, use-o somente em servidores que têm conexões de rede lentas e tempo de CPU de sobra. As respostas estáticas compactadas podem ser armazenadas em cache e, portanto, não afetam os recursos da CPU como respostas dinâmicas.

O valor padrão é 0.
name Atributo de cadeia de caracteres obrigatório.

Especifica o nome do esquema de compactação. Por exemplo, Gzip ou Deflate.
staticCompressionLevel Atributo uint opcional.

Especifica o nível de compactação para o esquema de compactação quando o conteúdo estático está sendo compactado. Os níveis variam de 0 (nível de compactação mais baixo e menor uso de CPU) a 10 (nível de compactação mais alto e maior uso de CPU). 0 significa que a compactação está desabilitada. O serviço WWW deve ser reiniciado antes que as alterações nesse atributo entrem em vigor.

O valor padrão é 7.

Elementos filho

Elemento Descrição
remove Elemento opcional.

Remove uma referência a um esquema de compactação HTTP da coleção de esquemas de compactação HTTP.
clear Elemento opcional.

Remove todas as referências aos esquemas de compactação HTTP da coleção de esquemas de compactação HTTP.

Exemplo de configuração

O elemento padrão <httpCompression> a seguir é configurado no arquivo ApplicationHost.config no IIS 7. Esta seção de configuração herda as definições de configuração padrão, a menos que você use o elemento <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>

Exemplo de código

Os exemplos de código a seguir adicionam o esquema de compactação Deflate ao 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

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma os conjuntos de configurações para a seção de local apropriado no arquivo 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()