【IE Cache】IE浏览器造成的请求Cache问题 的解决方案

对于普通的静态文件,html、css、js和图片文件而言,是希望浏览器进行缓存,以便再次访问时直接从浏览器获取,减少请求。


对于其它的js请求而言,如果被浏览器缓存了,而不能实时获取到最新的数据是让人抓狂的事情。


IE浏览器(使用IE核的360浏览器、搜狗浏览器等在IE模式下)就有这样一个设定:对于响应头(Response Header)中,没有明确表明是否缓存(强制缓存或者强制不缓存),IE浏览器默认的设置是“自动 automatically”,即在不关闭浏览器的情况下(同一个会话),刷新页面,对于相同url的请求并不会再次发送(即请求被缓存了)(微软官方说法:http://windowsitpro.com/networking/caching-ie


对于这个问题的解决方案从以下两个角度进行了考虑:


1、从发送请求的浏览器端(客户端)进行考虑

由于ie对于相同url进行了缓存,所以让url每次都不同,则可以避免被缓存的问题,

对于使用jQuery库ajax方法发送请求的来说,有这个参数可选cache:false,当不设置这个参数的时候,默认值为true,即每次url都不变,而当设置为false时,jQuery库会在设置的url后,自动加一个名字为“_”,值为随机数抑或是时间戳的一个参数

对于使用原生的js来说,也是一样的道理,在url最后加上一个随机数或者时间戳参数,来确保每一次发送的url都不一样,请求就不会被缓存住了


2、从返回响应头(Response Header)的服务器端进行考虑

因为只是ie对于没有明确表明是否缓存(强制缓存或者强制不缓存)造成的“自动 automatically”缓存的结果,那么就在响应头中明确加上不缓存的头信息即可解决这个问题。

需要在响应头(Response Header)增加的为以下两个(其中后一个针对低版本ie):

Cache-Control
no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma
no-cache

响应头信息可以在服务器配置(apcache/nginx等),具体方法这里不做介绍,楼主没有此方面研究


推荐使用服务器端的方法来解决问题,对于没法更改服务器响应头的来说,那么就只好用第一种方法将就一下了


参考资料:

https://segmentfault.com/q/1010000000204710

http://windowsitpro.com/networking/caching-ie

https://support.microsoft.com/zh-cn/kb/234067


posted @ 2016-05-25 14:11  snow_finland  阅读(270)  评论(0编辑  收藏  举报