Como posso obter compactação gzip no IIS7 funcionando?

Eu instalei compression estática e dinâmica para o IIS7, bem como definir os dois valores web.config no nível da minha Virtual Folder aplicativo. Pelo que entendi, não preciso mais ativar a compactação no servidor ou no nível do site, e posso gerenciá-lo por pasta usando meu arquivo web.config.

Eu tenho duas configurações no meu arquivo .config que defini para personalizar o gzip para meu aplicativo:

         

No entanto, quando executo o aplicativo, posso ver claramente que o gzip não é usado, porque os tamanhos de página são os mesmos. Eu também estou usando o YSlow for FireFox, que também confirma que minhas páginas não estão sendo gziped.

O que estou perdendo aqui? No IIS6, era uma simples questão de especificar os tipos de arquivo e definir o nível de compactação entre 0 e 10. Não vejo a necessidade documentada para especificar os tipos de arquivos ou o nível de compactação, já que os padrões parecem cobrir os tipos de arquivo e não estou vendo o nível em nenhum lugar.

Houve um tópico no forums.iis.net sobre isso durante o iis 7 beta. Acabou que o cara não tinha os módulos instalados, mas parece que você descartou isso da sua frase de abertura.

O principal conselho da Microsoft para ele foi permitir que o rastreamento de solicitação com falha pudesse descobrir o que estava errado. Este é possivelmente um dos resources mais subestimados do IIS7, mas certamente um dos mais poderosos.

  • Abra o Gerenciador do IIS.
  • Vá para o seu site e, no painel de ações (na extrema direita), clique em “Failed Request Tracing …” na seção “Configure”.
  • Clique em “ativar”.
  • Em seguida, na visualização de resources, clique em “Regras de rastreamento de solicitação com falha”. Clique em adicionar, em seguida, insira 200 para o código de status e, em seguida, clique em Concluir.

Se você não vir o “Failed Request Tracing” no painel de ações, precisará adicionar o recurso ao servidor – usando o assistente “Adicionar Serviços de Função” (Integridade e Diagnóstico \ Rastreamento) ou através do Web Platform Installer (Products \ Server \ IIS: Tracing) e, em seguida, feche e abra novamente o Gerenciador do IIS.

Em seguida, execute novamente o teste. Isso gerará algumas informações de log para examinarmos.

Procure em c: \ inetpub \ logs \ FailedReqLogFiles \ w3svcx. Você verá um monte de arquivos chamados fr000xx.xml. Abra qualquer um deles no seu navegador. (By the way, se você copiar esses arquivos em qualquer lugar, certifique-se freb.xsl está lá. Além disso, não exclua freb.xsl – se o fizer, basta apagar o diretório inteiro ou copiá-lo de outro local, como o IIS só cria uma vez por pasta.)

Clique na guia “detalhes da solicitação” e selecione “concluir o rastreamento da solicitação”. Pesquise na página por ‘compress’ – você deve encontrá-lo em várias áreas; uma vez para conteúdo estático e uma vez para conteúdo dynamic.

Se você não encontrar nenhum deles, o IIS não está configurado corretamente. Se você encontrá-los, você deve vê-los seguidos por um compression_success e um compression_do. O sucesso é auto-explicativo; o ‘do’ indica o que ele fez – no meu caso, ele mostrou “OriginalSize 1462784 CompressedSize 179482”

Como o seu não está funcionando, esperamos que você veja algo diferente que ajude a resolver o problema.

Certifique-se de desativar isso quando terminar, desativando o rastreamento de solicitação com falha no painel de ações do seu site.

Nós tivemos um problema parecido e acontece que o IIS7 faz um throttling dynamic baseado no CPU aqui.

http://www.iis.net/ConfigReference/system.webServer/httpCompression

dynamicCompressionDisableCpuUsage

Atributo uint opcional.

Especifica a porcentagem de utilização da CPU na qual a compactação dinâmica será desativada.

Nota: Este atributo atua como um limite superior da CPU no qual a compactação dinâmica é desativada. Quando a utilização da CPU ficar abaixo do valor especificado no atributo dynamicCompressionEnableCpuUsage, a compactação dinâmica será reativada.

O valor padrão é 90.


dynamicCompressionEnableCpuUsage

Atributo uint opcional.

Especifica a porcentagem de utilização da CPU abaixo da qual a compactação dinâmica será ativada. O valor deve estar entre 0 e 100. A utilização média da CPU é calculada a cada 30 segundos.

Nota: Este atributo atua como um limite de CPU inferior abaixo do qual a compactação dinâmica está ativada. Quando a utilização da CPU ultrapassar o valor especificado no atributo dynamicCompressionDisableCpuUsage, a compactação dinâmica será desativada.

O valor padrão é 50.

Observe os padrões – se o seu IIS7 atingir 90% do uso da CPU, ele desabilitará todo o conteúdo gzipped dynamic até que o uso da CPU caia abaixo de 50%!

Além disso, algumas ótimas recomendações e benchmarks aqui sobre o custo real da CPU do GZIP.

http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx

Resumindo, a menos que você tenha regularmente páginas dinâmicas bem acima de 200kb, não é um problema.

Seguindo o excelente conselho de JohnW, eu também permiti que o madeireiro encontrasse o culpado, embora a razão para o fracasso tenha sido diferente:

 STATIC_COMPRESSION_NOT_SUCCESS Reason 14 Reason NOT_FREQUENTLY_HIT 

Em suma, parece que se você não acertar a página com freqüência suficiente, o IIS7 não considerará isso merecedor de compactação, o que parece um pouco estranho para mim. No entanto, faz sentido neste caso porque eu estava apenas tentando testá-lo em uma máquina local.

De acordo com esta página , o padrão parece ser que uma página deve ser atingida 2 vezes em 10 segundos para ser um “hit frequente”. Se você realmente quiser, você pode replace o padrão em applicationHost.config (% systemroot% \ Windows \ System32 \ inetsrv \ config). Pelo menos para mim é um atributo bloqueado, então você não poderá substituí-lo em seu próprio web.config.

  

Além disso, observo agora que o SO já tinha essa resposta aqui: No IIS7, os arquivos gzipados não ficam assim .

Eu resolvi meu problema instalando compression dinâmica em Adicionar / Remover programas.

Na seção system.webServer do seu arquivo Web.config, adicione as seguintes linhas:

   

O esquema de compactação no IIS7 é habilitado por padrão, mas mapeia apenas um único tipo mime de javascript a ser compactado, application / x-javascript. Adicionar a linha acima diz ao IIS para fornecer a todos os arquivos .js esse tipo de mime, o que, por sua vez, faz a compactação funcionar.

ativar a compactação estática. compression dinâmica é para páginas dinâmicas como asp, php, aspx, etc.

Aqui está um link para a referência de configuração do IIS para compactação :

Para mim, acabou por ser o cenário

 noCompressionForProxies 

como estamos em um proxy aqui … tirei proxy e voila, compression.