我有一些静态内容通过CDN。 我正在使用IIS6的内置压缩(gzip&deflate)静态内容,这是工作正常,当我请求它。 但是,当CDN对内容进行初始请求时,不会被压缩。 因此他们没有压缩的内容转发给请求的人。 (是的,这引发了人们用无法处理压缩的浏览器从CDN请求[压缩]内容的问题 – 尽pipe如此,我们仍然将其放在一边)
下面是一个没有“Via”标题的请求示例:
HEAD /flash/swfobject.js HTTP / 1.1
User-Agent:curl / 7.19.7(i386-pc-win32)
主机:localhost:9120
接受:* / *
连接:保持活跃
accept-encoding:gzip
它会返回一个压缩的响应:
HTTP / 1.1 200 OK
内容长度:4357
内容types:application / x-javascript
内容编码:gzip
到期时间:周一,2020年1月1日00:00:00 GMT
Last-Modified:周三,2009年11月18日15:36:52 GMT
接受范围:字节
变化:接受编码
服务器:Microsoft-IIS / 6.0
date:2009年11月19日星期四10:27:50 GMT
但是,如果我在请求中包含“Via”标头(如CDN所做的那样),那么结果就会回到未压缩状态:
请求:
HEAD /flash/swfobject.js HTTP / 1.1
User-Agent:curl / 7.19.7(i386-pc-win32)
主机:localhost:9120
接受:* / *
连接:保持活跃
通过:1.1 204.160.105.17:80(占地面积4.5 / FPMCP)
accept-encoding:gzip
响应:
HTTP / 1.1 200 OK
内容长度:14602
内容types:application / x-javascript
到期时间:周一,2020年1月1日00:00:00 GMT
Last-Modified:周三,2009年11月18日15:36:54 GMT
接受范围:字节
服务器:Microsoft-IIS / 6.0
date:2009年11月19日星期四10:29:52 GMT
是的,这些演示在请求中使用“localhost”。 尽pipe我在各种networking上的各种机器上使用实际的域名获得了相同的结果。
那么两个问题:
1 – 这可能是由于额外的头,IIS不应用压缩? 如果是的话,我能做些什么呢?
2 – 如何知道代理是否在返回之前解压内容?
奖金问题3 – 我能做些什么来进一步调查这个问题?
我知道这个问题332049,但是在响应头中,而不是请求。
晚会有点晚,但是我在研究类似的问题时遇到了这个问题,所以我想我会介入。
IIS6不会将HTTP压缩应用于通过上游代理到达服务器的请求。 由于HTTP 1.1规范指定代理服务器必须添加“Via:”标头,因此这必须是IIS用来区分直接stream量和代理stream量的内容。
它可以启用,如果需要,但我会build议,这是首先testing。 声明这种默认行为的原因是因为大多数代理不能很好地处理压缩的内容。
参考文献:
TechNet:HcNoCompressionForProxiesconfiguration数据库属性(IIS 6.0)
HTTP / 1.1 Via头字段