Ativar IIS7 gzip


229

Como posso habilitar o IIS7 para compactar arquivos estáticos como js e css e como posso testar se o IIS7 está realmente compactando-os antes de enviar para o cliente?

Respostas:


243

Configuração

Você pode ativar a compactação GZIP inteiramente no seu Web.configarquivo. Isso é particularmente útil se você estiver em hospedagem compartilhada e não puder configurar o IIS diretamente, ou desejar que sua configuração seja carregada entre todos os ambientes que você segmentar.

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

Teste

Para testar se a compactação está funcionando ou não, use as ferramentas do desenvolvedor no Chrome ou Firebug for Firefox e verifique se o cabeçalho de resposta HTTP está definido:

Content-Encoding: gzip

Observe que esse cabeçalho não estará presente se o código de resposta for 304 (não modificado). Se for esse o caso, faça uma atualização completa (mantenha pressionada a tecla Shift ou controle enquanto pressiona o botão Atualizar) e verifique novamente.


@ DenNukem, desculpe, não tenho muita certeza. Eu só testei isso no IIS7. Alguém mais gostaria de comentar?
de Drew Noakes

21
Cuidado - ele funciona apenas se a seção httpCompression em applicationhost.config estiver desbloqueada. Por padrão, a seção está bloqueada para modificações, portanto, a substituição no web.config não funciona. Desperdiçou várias horas com isso. stackoverflow.com/a/2894695/245460 , consulte o artigo abaixo.
22412 Karel Kral

Certifique-se de que é um recurso instalado da Função da Web e também do MSDN: "Você também pode adicionar entradas curinga para os tipos MIME. No entanto, você pode definir tipos MIME apenas para o nível do servidor Web. Por exemplo, para ativar a compactação estática para todos os tipos MIME para o site padrão, primeiro adicione entradas curinga para os tipos MIME para o nível do servidor e ative a compactação estática para o site padrão ".
Luke Puplett

12
A compactação dinâmica também não funcionará, a menos que você tenha o módulo de compactação de conteúdo dinâmico instalado no servidor (acessível pelo instalador da plataforma da web). Você precisará disso se estiver usando pacotes de Css / Js.
Mark

somente css está sendo compactado, .jsnão. Além disso, tentei adicionar application/x-javascript. Usando junto com o tomcat, removemos o directoryparâmetro.
Codigo_idiot 28/06

58

Você precisará ativar o recurso no painel de controle Recursos do Windows:

Captura de tela do recurso IIS


16
No Windows Server 2008 R2, ele está localizado em Gerenciador do Servidor> Funções> Servidor Web (IIS). Clique em "Adicionar serviços de função" na seção "Funções". "Compactação dinâmica de conteúdo" está listada no cabeçalho "Desempenho".
Jonathan Little

37

Gzip global no HttpModule

Se você não tiver acesso à instância final do IIS (hospedagem compartilhada ...), poderá criar um HttpModule que adiciona esse código a todos os eventos 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;

Teste

Kudos, nenhuma solução é feita sem teste. Eu gosto de usar o plug-in do Firefox " Liveheaders ", que mostra todas as informações sobre todas as mensagens http entre o navegador e o servidor, incluindo compactação, tamanho do arquivo (que você pode comparar com o tamanho do servidor).


3
Estou usando hospedagem compartilhada e não precisei escrever nenhum código para ativar a compactação de saída GZIP. Foi possível apenas via Web.config. Veja minha resposta: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes,

2
Coloquei as três primeiras linhas no início de uma página aspx que queria compactar e funciona! Obrigado! Isso é muito menos problemático do que qualquer outra abordagem e funciona no IIS 6 para mim.
DenNukem

1
Esta é absolutamente a maneira de fazê-lo.
Matthew James Davis


2

Eu só precisava adicionar o recurso nos recursos do Windows, como Charlie mencionou. Para as pessoas que não conseguem encontrá-lo na janela 10 ou no servidor 2012 ou superior, localize-o como abaixo. Eu lutei um pouco

Windows 10

insira a descrição da imagem aqui

servidor Windows 2012 R2

insira a descrição da imagem aqui

servidor de janela 2016

insira a descrição da imagem aqui


1

Se você usa o YSlow com Firebug e analisa o desempenho da sua página, o YSlow certamente informará quais artefatos da sua página não foram compactados com zíper!





0

Para todos os pobres que precisam lutar com um servidor alemão / alemão :)

auf deutsch bitte schön

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.