2

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

这是一个不带“Via”标头的请求示例:

    HEAD /flash/swfobject.js HTTP/1.1  
    用户代理:curl/7.19.7 (i386-pc-win32)  
    主机:本地主机:9120  
    接受: */*  
    连接:保持活动  
    接受编码:gzip  

它返回一个压缩响应:

    HTTP/1.1 200 正常
    内容长度:4357
    内容类型:application/x-javascript
    内容编码:gzip
    到期:格林威治标准时间 2020 年 1 月 1 日星期三 00:00:00
    最后修改时间:格林威治标准时间 2009 年 11 月 18 日,星期三 15:36:52
    接受范围:字节
    变化:接受编码
    服务器:Microsoft-IIS/6.0
    日期:格林威治标准时间 2009 年 11 月 19 日星期四 10:27:50

但是,如果我在请求中包含“Via”标头(如 CDN 所做的那样),则结果会以未压缩的形式返回:

要求:

    HEAD /flash/swfobject.js HTTP/1.1
    用户代理:curl/7.19.7 (i386-pc-win32)
    主机:本地主机:9120
    接受: */*
    连接:保持活动
    通过:1.1 204.160.105.17:80(足迹 4.5/FPMCP)
    接受编码:gzip

回复:

 
    HTTP/1.1 200 正常
    内容长度:14602
    内容类型:application/x-javascript
    到期:格林威治标准时间 2020 年 1 月 1 日星期三 00:00:00
    最后修改时间:格林威治标准时间 2009 年 11 月 18 日,星期三 15:36:54
    接受范围:字节
    服务器:Microsoft-IIS/6.0
    日期:格林威治标准时间 2009 年 11 月 19 日星期四 10:29:52

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

那么两个问题:

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

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

奖励问题 3 - 我可以做些什么来进一步调查这个问题?

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

4

1 回答 1

4

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

于 2010-01-20T21:56:37.033 回答