【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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值