文档章节

IE请求的缓存问题详解

k
 kds
发布于 2017/07/25 09:53
字数 876
阅读 23
收藏 1

哈喽,大家好,今天跟大家分享一点关于IE缓存的知识。众所周知IE浏览器是我们开发人员非常不喜欢的浏览器,没有之一,但是IE在用户的使用比例上是相当的大的,毕竟程序员还不是那么的普及吗。

ok咱们不扯犊子了,直入正题。大家都知道IE浏览器的缓存是很强大的,但是强大的同时他也是很烦人的,列举一个大家都知道的IE的ajax请求问题,开发人员都知道IE的ajax请求也是会被放入缓存的,这也就意味着我们的ajax请求只有第一次请求的时候IE浏览器才会发送请求,一旦请求成功以后呢,当我们再次调用ajax请求的时候呢IE会直接读取缓存中的数据,这是一件令人很头疼的事情,但是ajax请求的参数总是变化的,这一点很重要,当我们ajax请求的参数变化时,IE才会把我们的请求当做一次新的请求,这也就是我们平时很难发现这个问题的原因了。

我这两天就刚好碰到了这个问题。

背景:我写了一个Excel导入功能,每次导入后,会给用户展示导入的日志,就是导入数据条数,每条标识,成功失败什么的。而我每次展示的数据都来自服务器的session,每次从session中取实现放进去的集合然后遍历打印日志,然后删除session中的缓存对象。

问题:我发现使用IE浏览器的时候存在一个问题,当我导入了多次不同内容的表格时,每次返回的日志都是第一次导入的日志,但是导入的数据是正常的数据。我感到非常的不理解。我特意输出的日志,输出的缓存我发现只有第一次导入的时候才会输出缓存中的对象(session中的内容也就是null),之后再倒入的时候都没有输出,这也就意味着只有第一次展示日志的时候执行了日志页面的代码,之后都不会再次执行。

原因:那么问题来了,这是为什么呢?我百度了好久也没有得到答案,后来我找到了IE浏览器关于ajax的bug。我发现这个问题和我的这个问题惊人的相似,我经过试验发现IE浏览器不知是ajax会存在这个bug,他的http请求同事也会存在缓存的问题,当我们的第二次请求和第一次请求的URL完全相同的时候,IE就不会认为这是一次新的请求,他也就不会发送新的http请求,而是直接取缓存中拿上次请求的结果,所以就出现了每次展示的结果都是第一次的原因了。

解决方案:那么这个问题怎么解决呢?很简单,和ajax的bug解决方法一样,只要把请求的URL后面加一个随机数参数就ok了,这样就可以骗过IE这个阿三,让他认为这是一次新的请求,这样问题就解决了。

© 著作权归作者所有

共有 人打赏支持
k

kds

粉丝 2
博文 6
码字总数 3680
作品 0
北京
私信 提问
加载中

评论(1)

百里青山
Nginx学习之九:实践学习指南

Nginx基础 1. nginx安装 2. nginx 编译参数详解 3. nginx安装配置+清缓存模块安装 4. nginx+PHP 5.5 5. nginx配置虚拟主机 6. nginx location配置 7. nginx root&alias文件路径配置 8. ngxht...

boonya
2014/07/09
0
0
spark2.1.0之源码分析——RPC客户端TransportClient详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beliefer/article/details/82143001 提示:阅读本文前最好先阅读: 《Spark2.1.0之内置RPC框架》 《spark2.1....

泰山不老生
08/28
0
0
开放接口中权限验证的缓存问题——求详解

睡觉前提一个缓存的问题: 最近做restful风格的接口开发,对于每次请求服务的资源都做一次权限验证,通过后返回相关资源。但是考虑到请求的数目会比较多,所以对于每次请求都从数据库查询数据...

新人王
2012/05/26
833
5
浏览器 HTTP 协议缓存机制详解

最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control、为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag,有时又...

大数据之路
2015/01/19
0
16
全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等

本文引用了腾讯工程师廖伟健发表于“鹅厂网事”公众号上的《【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解》一文部分内容,感谢原作者的分享。 1、引言 对于互联网,域名是访问的第一...

JackJiang2011
12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

eslint rules 规则

'rules': { "comma-dangle": ["error", "never"], //是否允许对象中出现结尾逗号 "no-cond-assign": 2, //条件语句的条件中不允许出现赋值运算符 "no-console": 2, //不允许出现console语句 ...

agenyun
17分钟前
1
0
类型判断时instanceof和equals的不同用法

接口设计时为了避免序列化的麻烦,将接口定义为参数为map<String,String>类型的接口,但是现在调用时需要转换当前的实体Bean为Map,接口接收方再把Map转换为另一个Bean实体。过程中的需要对类...

wangtx
23分钟前
1
0
vue 组件间传值(个人精编)

1.父组件向子组件传值 1⃣️.子组件标签绑定需要传递的参数名2⃣️.子组件页面使用props 接收参数 2.子组件向父组件传值  1⃣️.子组件使用$emit来触发一个自定义事件,并传递一个参...

MrBoyce
34分钟前
1
0
(荷兰)彼得·冯·门施著:博物馆学研究的目的

博物馆学研究的目的 (荷)彼得·冯·门施 尽管诸多关于博物馆学认知目的的不同看法可以被归纳为数个主要群体,但没有一个群体可以被称为“学派”。一般来说,学派是由于博物馆学研究目的的不...

乔老哥
43分钟前
2
0
Vue slot的用法

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来...

peakedness丶
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部