ajax 缓存 时间,解决 Ajax 缓存的小技巧

简明现代魔法 -> Ajax技术 -> 解决 Ajax 缓存的小技巧

解决 Ajax 缓存的小技巧

2010-02-21

2月18号的时候写了一篇文章Ajax 随机刷新文字,当时程序在 Chrome 和 FireFox 下跑起来了,但是在 IE 下却失效了。当时不知道是什么原因,现在总算弄清了,知道是 IE 缓存的问题。

一个解决办法就是,在 ajax 发送请求前加上下面一条语句:

xmlHTTP.setRequestHeader("If-Modified-Since","0");

也就是类似于这样:

xmlHTTP.open("get", URL, true);

xmlHTTP.onreadystatechange = callHTML;

xmlHTTP.setRequestHeader("If-Modified-Since","0");

xmlHTTP.send();

现在程序在 IE 下也可以正常运行了。

Web 开发中的缓存问题

一般情况下,浏览器都会缓存已经访问过的页面内容,关于如何禁止浏览器缓存的介绍,在网上到处都有相关的文章,但是,关于浏览器如何利用缓存,如何处理缓存的讲解,却鲜有人谈及。我一直为这个问题所困惑,这个问题也是绝大多数有经验的 Web 开发人员所共同面临的问题,我有些朋友已做过几十个大大小小的 Web 项目,当与他们交流这些问题时,他们虽然也在项目中遇到和解决过这些问题,但由于没有足够的时间和精力来仔细思考这些问题的原因和细节,他们对这些问题始终也是一知半解、含糊不清,而目前又很少关于这些问题的专门和详细讲解。

HttpServlet 类为 If-Modified-Since 请求头和 Last-Modified 头字段的这种应用提供了处理机制,当继承了 HttpServlet 类的 Servlet 程序接收到一个 GET 方式的访问请求时,HttpServlet 中重载的 service 方法在调用 doGet 方法之前,它还将调用 getLastModified 方法,并根据 getLastModified 方法的返回值来决定是否调用 doGet 方法和在响应消息中是否生成 Last-Modified 头字段,具体规则如下:

当 getLastModified 方法返回一个负数时,不管请求消息中的情况怎样,service 方法都将直接调用 doGet 方法来生成响应内容,这正是 HTTPServlet 类中定义的 getLastModified 方法的行为;

当 getLastModified 方法返回一个正数,且请求消息中没有包含 If-Modified-Since 请求头时(这往往出现在第对某个资源的第一次访问时),或者请求消息中包含的If-Modified-Since 请求头中的时间值比 getLastModified 方法返回的时间值旧时,service 方法将根据 getLastModified 方法的返回值生成一个 Last-Modified 头字段,然后调用 doGet 方法生成响应内容;

当 getLastModified 方法返回一个正数时,且请求消息中包含的 If-Modified-Since 请求头中的时间值比 getLastModified 方法返回的时间值新或者与之相同时,service 方法将不调用 doGet 方法,而是向浏览器返回一个304(Not Modified)状态码表示浏览器可以使用其以前缓存的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值