解决IE6.0.2800压缩HTTP数据Bug之草记

来源:互联网 发布:mac截图后图在哪里 编辑:程序博客网 时间:2024/05/01 09:12

质量组急报,众多买家在购买商品后重新选择收货地时,省份/城市/地区下拉列表一片空白。如下图:

一番研究,未果。甚至难以重现此Bug。经过仔细调研买家的电脑操作系统/浏览器类型与版本/安装的插件…等等使用环境信息,最后猜测错因可能在买家使用的浏览器版本上。

获悉买家使用的浏览器为IE6.0.2800,安装虚拟机+win98+从天空软件站觅得的IE6.0.2800安装包,终于重现了买家遭遇的Bug。即第一次访问正常,而后则出现买家汇报的问题,且报脚本错误。删除脱机文件后再第一次访问又恢复正常,而后再错。

脚本错误出在选择收货地时加载的长达100K的地理数据脚本上。脚本虽大,但服务器端使用了压缩输出,而且浏览器加载一次后会缓存。性能问题暂且不表。细查脚本代码,也未发现错误。估猜是否浏览器从缓存中加载脚本时出现异常。

为避免脚本更新后与浏览器缓存不同步的问题,淘宝网站中引入的脚本之后都带时间戳,如:

http://www.taobao.com/xxx/xxx/china_division_new.js?t=20070328

偶然发现如果直接在地址栏填入上述URL,IE6.0.2800不能正确识别文件类型,如下图:

而其他版本的IE则能正确识别。如果去掉时间戳,或在时间戳后加上 .js 后缀,IE6.0.2800就可以正确识别了。

依此思路,将脚本src修改为 http://www.taobao.com/xxx/xxx/china_division_new.js?t=20070328.js 后,Bug消失。

后来从微软的知识库寻得了可能的理论根据,原来当IE6 sp1收到压缩的 HTTP 数据时,有可能导致HTML 页显示不完整。IE6 sp1 的版本号正是2800。IE6 sp2 已经修复了这个Bug,所以目前大多数用户使用的IE6 in WinXP sp2 都不会出现此问题。

再后来,承志告诉我,一年之前,他在编写淘宝网的CSS时就遭遇了这个诡异的问题——IE对CSS的缓存和GZip似乎有点冲突。当时采取的解决办法就是在css文件时间戳之后加上 .css 后缀。 正如IE在CSS上诡异的hacks一样,难以解释为什么增加了后缀信息就可以避开IE6的Bug。

原创粉丝点击