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.