IIS6在请求中包含Via头时不执行gzip压缩

时间:2009-11-19 11:57:29

标签: http iis iis-6 gzip http-via-header

我有一些静态内容通过CDN。我正在使用IIS6的内置压缩(gzip和amp; deflate)来获取静态内容,这在我请求它时工作正常。但是,当CDN对内容进行初始请求时,它不会被返回压缩。因此,他们没有压缩内容转发给请求它的人。 (是的,这引发了人们通过无法处理压缩的浏览器从CDN请求[压缩]内容的问题。 - 我们现在暂时将其放在一边)

以下是没有“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  

它返回一个压缩响应:

    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

但是,如果我在请求中包含一个“Via”标头(如CDN那样),那么结果将以未压缩的方式返回:

请求:

    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

回应:

 
    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

是的,这些演示在请求中使用“localhost”。我使用来自不同网络上的各种机器的实际域名获得了相同的结果。

然后有两个问题:

  1. 由于额外的标头,这可能是IIS没有应用压缩吗?如果是这样我该怎么办呢?

  2. 如何在返回内容之前判断代理是否正在解压缩内容?

  3. 奖金问题3 - 如何进一步调查此问题?

    我知道问题332049,但是在响应中有标题,而不是请求。

1 个答案:

答案 0 :(得分:4)

我在自己研究这个问题时偶然发现了你的问题。我发现了article on MSDN,简短的回答是Via头用于代理,代理通常会压缩压缩。您可以选择删除标头,也可以更改IIS元数据库中的设置(HcNoCompressionForProxies =“FALSE”)。我在这两个方面都取得了成功。