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?

Paulo
fonte

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.

Drew Noakes
fonte
@ 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

Charlie
fonte
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).

missaghi
fonte
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
5

no windows 2012 r2, pode ser encontrado aqui:

insira a descrição da imagem aqui

Sebastian 506563
fonte
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

Ashkan Sirous
fonte
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!

jadusty
fonte
0

Experimente o Firefox com os complementos do Firebug instalados. Estou usando isso; ótima ferramenta para desenvolvedor web.

Ativei a compactação Gzip também no meu IIS7 usando o web.config.

user495450
fonte
O Google também tem um teste de página disponível: developers.google.com/speed/pagespeed/insights
Dr. Aaron Dishno
0

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

auf deutsch bitte schön

Stefan Michev
fonte