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

2024-04-12

我有一些静态内容正在通过 CDN。我正在使用 IIS6 的内置压缩(gzip 和 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 - 我可以做什么来进一步调查这个问题?

我知道问题 332049,但该问题的标头位于响应中,而不是请求中。


我自己研究这个问题时偶然发现了你的问题。我发现了一个MSDN 上的文章 http://blogs.msdn.com/webtopics/archive/2009/02/24/troubleshooting-http-compression-in-iis-6-0.aspx简而言之,Via 标头用于代理,而代理通常会扰乱压缩。您可以选择删除标头,也可以更改 IIS 元数据库中的设置 (HcNoCompressionForProxies="FALSE")。我两种选择都取得了成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在请求中包含 Via 标头时,IIS6 不执行 gzip 压缩 的相关文章

随机推荐