关于IE6下gzip的问题,网上流传很多个版本

并不是说IE6对所有的gzip压缩都有问题,现在可以确认的是:

  1. 对图片的gzip压缩会造成压面的假死,见:开启Nginx的gzip压缩功能。这个处理比较简单,直接取消对gzip的压缩即可
  2. 对JS的gzip压缩,在某些IE版本下会有问题,之前比较暴力的解决方法是直接禁用IE6的gzip压缩

对于第2个问题,权威的微软官方的Issue如下:

BUG: Script Errors with Cache-Control:no-cache HTTP Header and HTTP Compression

就是说,在同时满足以下几个条件时,IE6执行JS会报错,才会导致整个页面出现问题:

  1. 引用外部的JS
  2. 服务器对JS进行了gzip压缩
  3. 服务器输出了Cache-Control: no-cache

找了一台纯净的IE6机器,没有打任何的Patch,在Nginx上配置了

more_set_headers    "Cache-Control: no-cache";

登录mail后,果然出现了页面错误,如下图:

正如微软官方所说的,报错:

Object doesn't support this property or method

然后在一台IE6 SP2的机器上同样测试,没有重现这个错误,就是说在SP2以上的IE6上已经没有问题了

反之,如果不输出“Cache-Control: no-cache”这个Header,那么js在任何版本的IE6上也都没有问题

 

知道Bug的起因后,如果确实存在不需要缓存的js,可以有以下2个办法:

        1.  我们在Nginx上输出expires,而不要输出Cache-Control: no-cache即可:

             expires 0;

             注意,不要设置成-1,因为对于负值,Nginx会自动输出一个“Cache-Control: no-cache”的Header

        2.  配置Nginx,对于IE6 SP2以下版本的IE6,不要启用gzip压缩:

            gzip_disable "MSIE [1-6]\.(?!.*SV1)";