Tag Archives: compression

http请求中的via头可能会影响iis6 web服务器的压缩行为

哎,终于更新博客了,这是在大猫那边买空间之后为数不多的文章之一;工作之后发现时间真的是越来越紧张,不像在学校那样时间宽裕,又想念学校生活了。。几个月之前就想更新,学习、加班什么乱七八糟的事耽误着,总让人有种心有余力不足的感觉,差不多空间又要续费了,再不更新资源严重浪费了。

今天记录一下工作中修bug中遇到的一个技术问题,主要是http的via头会影响iis6 web服务器的默认压缩行为;更具体一点,就是如果请求中有via头,并且希望得到压缩内容,也就是”Accept-Encoding”头中的含有有效压缩字符,如”Accept-Encoding: gzip”,那么iis6服务器默认情况下是不回复压缩的内容;因为iis6服务器认为,含有via头的http请求来自代理服务器,它们不能很好的处理有编码的内容;确实是这样,最近修了公司产品几个关于压缩的bug。

我们举例子来理解它的行为:

1.环境:iis6服务器,我用windows 2003装的iis6;任何能发送含有via头请求的浏览器,我用telnet,非常简单但是非常强大;如下图所示。

有via,没压缩内容

没via头,有压缩内容

 

2.分别发送含有via头的请求和没有via头的请求,我们发现,来自iis6服务器的内容不一样。原因上面已经提及。那么,如何解决?简单,在请求中屏蔽via头,还有一个办法,调整iis6的一个参数,就能让它回复含有编码的内容给含有via头的请求:在配置文件中,C:\WINDOWS\system32\inetsrv\MetaBase.xml,把变量HcNoCompressionForProxies的值变为FALSE;这样,就能收到压缩编码了。如下图:

有via,有压缩