IE6中javascript文件开启Gzip出现代码不执行情况
2012-06-23 14:00
239 查看
今天处理IE6下的一个bug,经过调试才发现是javascript文件文件总是执行不了,后来中午吃完饭回来才想起以前同事遇见的html中的javascript不 可以执行的问题,怀疑是gzip的原因,此次的问题就是因为动态加载javascript文件导致代码不执行,经过研究发现gzip压缩过的 javascript文件,如果header里Cache-Control 数据有no-cache, no-store,就会出现IE6中js代码不执行的问题。下面是转发的文章内容:
IE6下面调用开启了gzip压缩Javascript的时候,时常会碰到无法执行的情况,有可能是src调用,有可能是ajax调用,其它的浏览器工作正常,唯独IE6不能正常工作。
出现这个BUG的状况如下:
用户使用IE6浏览器
服务器没有设置 被请求文件(javascript) expires, cache-control.
服务器端开启了chunked encoding模式
通过javascrip的src调用方式或者ajax请求javascript文件
有可能是通过php生成的javascript文件
服务器端开启了gzip压缩
解决这个问题,我们要在服务器的cache-control和expires 头信息上做点工作。
经过测试,header头信息如下的gzip压缩过的javascript调用可以正常工作。
cache-control必须要设置成maxage=time的格式,maxage是指定缓存生效时间,1为1秒
Expires必须要设置,它的时间稍大于Date即可,Date是页面请求时间,Expires是过期时间
Pragma设置为public
设置好了这两个参数,一般就可以了。
在nginx服务器端,我们需要对服务器配置:
IE6下面调用开启了gzip压缩Javascript的时候,时常会碰到无法执行的情况,有可能是src调用,有可能是ajax调用,其它的浏览器工作正常,唯独IE6不能正常工作。
出现这个BUG的状况如下:
用户使用IE6浏览器
服务器没有设置 被请求文件(javascript) expires, cache-control.
服务器端开启了chunked encoding模式
通过javascrip的src调用方式或者ajax请求javascript文件
有可能是通过php生成的javascript文件
服务器端开启了gzip压缩
解决这个问题,我们要在服务器的cache-control和expires 头信息上做点工作。
经过测试,header头信息如下的gzip压缩过的javascript调用可以正常工作。
Cache-Control:maxage=1
Connection:keep-alive
Content-Encoding:gzip
Content-Type:application/x-javascript;charset=GBK
Date:Wed, 01 Dec 2010 01:24:07 GMT
Expires:Wed, 01 Dec 2010 01:24:08 GMT
Pragma:public
Server:nginx
Transfer-Encoding:chunked
分析上面的头信息,我们可以注意到:Connection:keep-alive
Content-Encoding:gzip
Content-Type:application/x-javascript;charset=GBK
Date:Wed, 01 Dec 2010 01:24:07 GMT
Expires:Wed, 01 Dec 2010 01:24:08 GMT
Pragma:public
Server:nginx
Transfer-Encoding:chunked
cache-control必须要设置成maxage=time的格式,maxage是指定缓存生效时间,1为1秒
Expires必须要设置,它的时间稍大于Date即可,Date是页面请求时间,Expires是过期时间
Pragma设置为public
设置好了这两个参数,一般就可以了。
在nginx服务器端,我们需要对服务器配置:
location ~* .(ico|css|js|png|jpeg|jpg|gif|rar|zip|7z|gz|pdf) {
expires 1d;
}
如果javascript文件是由PHP生成的,我们就需要利用php来输出header控制了。expires 1d;
}
<?php $expires = 1; header("Pragma: public"); header("Cache-Control: maxage=".$expires); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT'); header("Content-Type: application/x-javascript;charset=GBK\n");实际应用中,需要灵活配置,Javascript文件,请尽可能通过服务器发送header头,PHP生成javascript文件,效率本来就不高,再加上额外需要输入header头,更是得不偿失。
相关文章推荐
- JavaScript调用客户端的可执行文件(示例代码)
- javascript代码运行不出来执行错误的可能情况整理
- WebApi 数据保护操作未成功。这可能是由于未为当前线程的用户上下文加载用户配置文件导致的。当线程执行模拟时,可能会出现此情况。","ExceptionType":"System.Security.Cryptography.CryptographicException","StackTrace
- JavaScript调用客户端的可执行文件(示例代码)
- JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法
- javascript代码运行不出来执行错误的可能情况整理
- JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法
- JavaScript语句是在客户端执行的代码,所以jsp文件的jsp有语法错误
- JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法
- JavaScript的执行原理,很多人都理解错了:在js被加载后,其实就将js代码执行了一遍,在内存中创建了所有js文件中的变量。而不是激发了某个js方法后,再去相应的js文件中去执行,是去内存中执行
- IE6 调用gzip压缩后JavaScript不执行的解决方法
- JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法
- JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法
- jsp引用javascript不执行但是直接javascript代码放到jsp文件可以
- 百度搜霸工具条出现下载任意文件执行漏洞 含攻击代码
- 调试断点,在没有对方代码的情况下,可以断点调试静态库或者可执行文件。
- JavaScript的eval函数,用法,用来执行JavaScript代码,即将JavaScript代码加载入内存(但是并没有执行和触发,跟加载js文件是一个道理,即将js文件加载入内存,但是js)
- JavaScript文件只在IE6下出错(“未结束的字符串常量”)的解决办法。
- Python3.4(Pyhon)代码如何打包成.exe可执行文件——详细教程
- 应用程序按照以下顺序执行由 global.asax 文件中定义的模块或用户代码处理的事件