IIS6 não fazendo compactação gzip ao incluir o cabeçalho Via na solicitação

2

Eu tenho algum conteúdo estático passando por um CDN. Estou usando a compactação interna do IIS6 (gzip & deflate) para conteúdo estático e isso está funcionando bem quando eu solicito isso. No entanto, quando o CDN faz a solicitação inicial para o conteúdo, ele não está sendo retornado compactado. Portanto, eles não têm conteúdo compactado para encaminhar para as pessoas que o solicitam. (Sim, isso levanta a questão das pessoas que solicitam o conteúdo [zipado] do CDN com um navegador que não consegue lidar com a compressão. Porém, vamos colocar isso de lado por enquanto.)

Veja um exemplo de solicitação sem o cabeçalho "Via":

HEAD /flash/swfobject.js HTTP/1.1  
User-Agent: curl/7.19.7 (i386-pc-win32)  
Host: localhost:9120  
Accept: */*  
Connection: Keep-Alive  
accept-encoding: gzip  

E retorna uma resposta compactada:

HTTP/1.1 200 OK
Content-Length: 4357
Content-Type: application/x-javascript
Content-Encoding: gzip
Expires: Wed, 01 Jan 2020 00:00:00 GMT
Last-Modified: Wed, 18 Nov 2009 15:36:52 GMT
Accept-Ranges: bytes
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
Date: Thu, 19 Nov 2009 10:27:50 GMT

No entanto, se eu incluir um cabeçalho 'Via' na solicitação (como faz o CDN), o resultado será descompactado:

Solicitação:

HEAD /flash/swfobject.js HTTP/1.1
User-Agent: curl/7.19.7 (i386-pc-win32)
Host: localhost:9120
Accept: */*
Connection: Keep-Alive
Via: 1.1 204.160.105.17:80 (Footprint 4.5/FPMCP)
accept-encoding: gzip

Resposta:

HTTP/1.1 200 OK
Content-Length: 14602
Content-Type: application/x-javascript
Expires: Wed, 01 Jan 2020 00:00:00 GMT
Last-Modified: Wed, 18 Nov 2009 15:36:54 GMT
Accept-Ranges: bytes
Server: Microsoft-IIS/6.0
Date: Thu, 19 Nov 2009 10:29:52 GMT

Sim, essas demos usam 'localhost' na solicitação. Eu recebo o mesmo resultado usando o nome de domínio real de várias máquinas em várias redes.

Duas perguntas, então:

  1. Isso poderia ser o IIS não aplicando a compactação devido ao cabeçalho extra? e se sim, o que posso fazer sobre isso?

  2. Como posso saber se o proxy está descompactando o conteúdo antes de retorná-lo?

Pergunta bônus:

  1. O que posso fazer para investigar esse problema ainda mais?

Estou ciente da pergunta SO 332049 , mas isso tem o cabeçalho na resposta, não a solicitação.

    
por Matt Lacey 19.11.2009 / 15:30

1 resposta

1

Um pouco atrasado para a festa, mas me deparei com isso enquanto pesquisava um problema semelhante, então imaginei participar.

O IIS6 não aplica compactação HTTP a solicitações que chegam ao servidor por meio de um proxy upstream. Como a especificação HTTP 1.1 especifica que os servidores proxy devem adicionar um cabeçalho "Via:", isso deve ser o que o IIS usa para distinguir entre tráfego direto e com proxy.

Ele pode ser ativado se necessário, mas eu aconselho que isso seja testado primeiro. A razão reivindicada para esse comportamento padrão é porque a maioria dos proxies não lidam bem com o conteúdo compactado.

Referências:

TechNet: HcNoCompressionForProxies Propriedade da Metabase (IIS 6.0)

HTTP / 1.1 via cabeçalho

    
por 12.02.2010 / 09:56