Precisa de ajuda com algumas configurações de compactação do IIS7 web.config

9

Estou tentando definir minhas configurações de compactação do IIS7 no meu arquivo web.config. Estou tentando ativar solicitações HTTP 1.0 para serem gzip.

O MSDN tem todas as informações sobre isso aqui .

É possível ter essas informações de configuração no arquivo web.config do meu site? Ou preciso defini-lo no nível do aplicativo? Atualmente, eu tenho esse código no meu web.config ...

<system.webServer>
    <urlCompression 
        doDynamicCompression="true" 
        dynamicCompressionBeforeCache="true" />
    <httpCompression 
        cacheControlHeader="max-age=86400" 
        noCompressionForHttp10="False" 
        noCompressionForProxies="False" 
        sendCacheHeaders="true" />

    ... other stuff snipped ...

</system.webServer>

Não está funcionando :( As solicitações HTTP 1.1 estão sendo compactadas, mas não a 1.0.

Essa página do MSDN acima diz que pode ser usada em: -

  • Machine.config
  • ApplicationHost.config
  • Aplicativo raiz Web.config
  • Aplicativo Web.config
  • Diretório Web.config

Portanto, podemos definir essas configurações por site, programaticamente em um arquivo web.config? (este é um arquivo Application Web.config ...) O que fiz de errado?

Felicidades :)

Edição: me perguntaram como eu sei HTTP1.0 não está sendo compactado. Estou usando as Regras de rastreamento de solicitação com falha, que informa:

DYNAMIC_COMPRESSION_START
DYNAMIC_COMPRESSION_NOT_SUCESS
    Reason: 3
    Reason: NO_COMPRESSION_10
DYNAMIC_COMPRESSION_END
Pure.Krome
fonte

Respostas:

3

Preste muita atenção ao fato de que a configuração do IIS 7.x web.config de

noCompressionForProxies="false"

Não é respeitado no nível web.config. Ele deve ser definido em C: \ Windows \ System32 \ inetsrv \ config \ ApplicationHost.config da seguinte maneira:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="False">

Certifique-se de executar uma redefinição do IIS após alterar a configuração.

Uma solicitação é determinada como sendo de um proxy pelo IIS se a solicitação da Web do cliente tiver o cabeçalho HTTP "Via" da seguinte maneira:

Via: 1.1 foo
evermeire
fonte
Você também pode usar appcmdpara definir as configurações no nível do aplicativo (o que provavelmente é muito mais fácil).
Pure.Krome
2

Após um bom período de pesquisa, ele é 'bloqueado' por padrão no nível do aplicativo. Como tal, ele precisa ser 'desbloqueado'. isso pode ser conseguido através da linha de comando ou das ferramentas administrativas do iis7 (download extra).

por exemplo. appcmd set config -section:urlCompression /doDynamicCompression:true

Referências:

Pure.Krome
fonte
1

Como você está testando se as solicitações HTTP1.0 não estão sendo compactadas? Será que o cliente que você está usando não está dizendo ao servidor que ele pode aceitar uma resposta compactada?

Se você puder ver os cabeçalhos enviados pelo cliente (apresentados pelo próprio cliente de teste, usando o Firebug ou similar se estiver testando no Firefox ou IEHTTPHeaders se estiver testando no IE ou detectando o tráfego usando uma ferramenta externa), você deve ver algo como

Accept-Encoding: compress, gzip, deflate

lá em algum lugar. Se o cliente não informar ao servidor que ele pode aceitar uma resposta compactada, o servidor não enviará uma, independentemente de outras configurações que você tenha do lado do servidor.

Outro problema pode ser se você estiver testando através de um servidor proxy que se identificou como tal. Nesse caso, a configuração noCompressionForProxies pode ter precedência e bloquear a possibilidade de uma resposta compactada.

Uma coisa a observar é que alguns clientes e proxys que enviam solicitações HTTP1.0 (geralmente software mais antigo) não manipularão corretamente uma resposta compactada se receberem uma; portanto, se você habilitar a compactação para respostas a solicitações HTTP1.0, verifique se teste seu site / aplicativo em todo o software cliente / proxy que você espera que os visitantes / usuários usem. Isso é menos problemático se você pode garantir que seu público-alvo usará determinado software (se, por exemplo, o aplicativo for apenas para uma rede corporativa interna), mas, caso contrário, existem muitas combinações para testar, e é por isso que a maioria dos servidores desabilita a compactação para 1.0 solicita completamente.

David Spillett
fonte
Estou testando que http1.0 pedidos não estão sendo compactados usando a solicitação falhou Regras de Rastreamento, que reporta: - DYNAMIC_COMPRESSION_START DYNAMIC_COMPRESSION_NOT_SUCESS Motivo: 3 Motivo: NO_COMPRESSION_10 DYNAMIC_COMPRESSION_END
Pure.Krome