站长手记 - 站长手记
打印】【收藏此页
解决Squid代理HTTP时在浏览器出现Content Encoding Error问题
作者:本站:苏信东  来源:WaveCN.com  发布日期:2009-09-25  最后修改日期:2009-09-25  

最近新装了一台DELL R710作为网关服务器,跑CentOS 5.2,双ADSL+光纤3线上网,iptables+squid作透明代理,用起来很爽,但就是某些网站总是会显示Content Encoding Error(用的是FireFox,如果用IE则显示“不支持的编码方式”),百思不得其解。

上网搜了很久,终于搜到几篇相关的文章讲这个事情,参见:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=501192

http://squidproxy.wordpress.com/2008/04/29/chunked-decoding/

问题的实质按该文章的说法其实是网站HTTP服务器的错,而不是squid的问题。因为squid目前只支持http 1.0,并且在和网站HTTP服务器握手时也会声明这一点,但某些服务器就是不理会而硬性向squid发送只有在http 1.1中定义的http 头:chunked。因此squid 无法处理而只能给出出错信息给浏览器。

解决办法只是临时的,据开发者称,squid  3.1将会支持http 1.1,届时此问题将不复存在,但目前,只能通过如下方法去避免这个问题:

修改squid.conf,添加:

          acl broken dstdomain 这里给出出问题的网站的名称,比如:.it168.com
          header_access Accept-Encoding deny broken

保存后重新载入配置文件:

          service squid reload

这个临时解决方案的最大问题是要维护这个网站列表。目前我发现用nginx做http 服务器的发生这个问题的几率比较高。