`
xjk2131650
  • 浏览: 57000 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

Ajax 缓存: 两个重要的事实

阅读更多

事实1 : Ajax缓存和HTTP缓存效果相同

现代浏览器的HTTP系统和缓存系统要比Ajax的XMLHttpRequest对象更靠近底层. 在这个层面上,浏览器并不知道或关心Ajax请求。它只是服从正常的基于从服务器返回的HTTP响应头缓存规则。

如果你已经知道HTTP缓存,您可以将这种知识应用到Ajax的缓存。唯一真正的区别是,您可能需要以不同的方式为静态文件设置响应头。

以下HTTP响应头是可以用来做Ajax缓存的:

  • Expires:应该被应用在你知道内容何时被修改的情况下。 例如,如果是股票价格您可能会设置一个在10秒后过期的数值。对于照片,你可以设置一个更长时间的Expires头,因为你指望它永远不改变。Expires头允许浏览器在一段时间内可以重复使用缓存内容,并避免任何不需要的同服务器的交互过程.
  • Last-Modified: 设置这个标记会通知浏览器可以使用If-Modified-Since头来产生一个条件GET请求以便检查其本地缓存。如果数据不需要更新,服务器将使用HTTP 304状态码来响应此请求
  • Cache-Control: 如果允许,这应该被设置为'public',使其他用户可以在中间代理和缓存服务器上存储和共享数据,在Firefox上,这还将启用针对HTTPS的缓存

当然,如果您使用Ajax的POST方法,这并不适用,因为POST请求不会被缓存。如果您的Ajax请求有安全性要求,你应该总是使用POST方法,例如:银行帐户的资金转账。

我们创建了一个Ajax缓存例子来展示这些响应头的效果. 使用HttpWatch, 你可以看到我们在ajax响应头里面设置了上述全部3个响应头:

如果你以固定频率多次点击'Ajax Update'按钮, 你会发现ajax大约每隔1分钟更新一次,因为Expires头设置为在未来的1分钟后过期。在HttpWatch截图里面你可以看到重复点击刷新按钮导致ajax请求直接从浏览器缓存里面读取,没有发生任务网络活动(即在发送和接收列里面字节数都为0) :

最后一次点击发生在 1:06.531 ,因为缓存的数据已经超过1分钟,Ajax请求发生了一次网络通讯。从服务器返回的响应头200指明新的内容应该被重新下载。

事实2: IE浏览器不会刷新过期日期前的Ajax内容

有时,Ajax是用来在加载时填充网页的内容(如价格清单)。当页面加载完毕事件发生后,它直接被JavaScript调用,而不是依靠按一个按钮来触发。这使得Ajax调用表现为它好像是一个嵌入的资源

当你开发一个这样的网页时,通常的想法是试图通过更新嵌入的Ajax内容来刷新页面。对于其它嵌入的资源比如CSS或图片,浏览器自动发送的请求取决于F5 (刷新)或 Ctrl+F5 (强制刷新)

  1. F5(刷新) 如果原本的内容有一个Last-Modified 响应头,浏览器会建立一个有条件的更新请求. 浏览器使用If-Modified-Since 请求头使得服务器可以返回HTTP 304响应代码来避免不必要的下载。
  2. Ctrl+F5 (强制刷新) 导致浏览器发送一个没有条件的GET请求,其中Cache-Control请求头被设置为'no-cache'. 这代表不管浏览器需要的内容是否已经被缓存,所有的中间代理和缓存服务器都需要重新从原始服务器来下载此内容。

Firefox会将刷新类型传递给所有Ajax请求来刷新页面,因此任何Ajax派生的内容都会被更新。这个HttpWatch插件的屏幕快照显示了我们的Ajax缓存刷新 页面效果:

Firefox 确保Ajax请求是被假定为带条件的GET。在我们这个例子页面内,如果缓存的数据在10秒以内,服务器会返回304代码,如果数据过期 ,服务器会返回200的代码.

在 Internet Explorer中, 已加载的Ajax请求被视为和页面刷新无关的内容,用户的刷新动作也不会被传递到Ajax中。如果缓存的Ajax内容还没过期,IE不会发生GET请求到服务器,它直接从缓存读取内容,导致在HttpWatch中看到(Cache)数据的产生。下面是在IE中缓存没有过期时按F5的效果:

即时按Ctrl+F5, Ajax仍然从缓存中加载内容:

这意味这在IE中,即使你按强制刷新(Ctrl+F5),在内容过期之前,Ajax也不会更新。确保更新的唯一方法是从缓存中删除此记录。在HttpWatch中, 你可以通过使用下面的工具:

 

分享到:
评论

相关推荐

    《Ajax实战:实例详解》sources

    2. **JSON与XML**:Ajax传输的数据格式通常有JSON和XML两种。JSON(JavaScript Object Notation)轻量级、易于读写,更受现代Web开发欢迎。XML则是一种结构化数据格式,适用于复杂的数据交换,但解析相对复杂。 3. ...

    Ajax实战:实例详解源代码

    以下是一个简单的Ajax请求示例: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'data.txt', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) ...

    Ajax 缓存问题,Ajax 缓存问题

    然而,Ajax缓存问题可能会导致一些意料之外的状况,特别是当服务器端的数据发生变化时,浏览器仍然展示旧的缓存数据,这会给用户带来困扰,甚至可能导致错误的操作。本篇文章将深入探讨Ajax缓存问题及其解决方案。 ...

    清除AJAX的缓存,清除AJAX的缓存

    因此,了解如何有效地管理及清除Ajax请求产生的缓存显得尤为重要。 #### 二、理解Ajax缓存机制 ##### 1. 浏览器缓存原理 当一个Ajax请求被发送到服务器后,如果请求的数据没有发生变化,浏览器会利用缓存机制来...

    如何 不使用ajax缓存

    ### 如何不使用Ajax缓存 在Web开发中,Ajax技术因其异步通信特性而被广泛应用,但在实际项目中可能会遇到缓存问题,比如在进行数据更新操作时(如删除、修改),由于浏览器缓存的存在导致请求返回的是之前的数据...

    疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发(part01)

    这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正...

    ajax与jsp清除缓存

    此外,对于AJAX请求,使用时间戳参数是一个非常实用且简单的技巧,它能确保每次请求都是新的,从而避免了因缓存而导致的数据不一致问题。而在JSP中,通过直接设置响应头,可以更细粒度地控制缓存策略,这对于处理...

    AJAX学习总结(四)---解决缓存问题

    在本文中,我们将深入探讨AJAX(异步JavaScript和XML)技术的一个重要方面:如何解决缓存问题。AJAX使得网页能够不需刷新整个页面就能与服务器进行数据交互,极大地提升了用户体验。然而,缓存机制有时可能会导致...

    疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发(分卷压缩part02)

    这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正...

    AJAX 缓存问题的两种解决方法(IE)

    ### AJAX 缓存问题的两种解决方法(IE) 在探讨如何解决AJEX缓存问题之前,我们先简要了解一下AJAX的基本概念及其工作原理。AJAX(Asynchronous JavaScript and XML)是一种网页开发技术,用于创建交互式的网页应用...

    ajax实战:配套源码

    Ajax(Asynchronous JavaScript and XML)技术是Web开发中的一个重要组成部分,它使得网页可以在不刷新整个页面的情况下与服务器进行数据交互,显著提升了用户体验。本篇文章将深入探讨`Ajax`的核心原理,并结合提供...

    Ajax框架:简单的dwr实例

    6. **缓存管理**:DWR提供了一种缓存机制,可以缓存服务器返回的结果,减少不必要的网络传输,提高性能。 7. **批量调用与异步调用**:DWR支持批量执行多个服务器调用,并且可以异步执行这些调用,使得用户界面不会...

    在(ASP/PHP/JSP/html/js)中禁止ajax缓存的方法集锦

    ajax缓存有好处,但也有坏处,缓存有时候会导致误操作,影响用户体验,若你的WEB项目不需要ajax缓存功能,可按下述方法来禁止ajax缓存。 一、在ASP中禁止ajax缓存: ‘放在ASP网页最开头部分  Response.expires=0 ...

    vs2008中Ajax错误:Sys未定义

    这个问题通常出现在尝试使用ASP.NET AJAX框架时,由于某些配置错误导致系统无法识别“Sys”对象。 #### 二、问题分析 该问题的根本原因在于,当VS2008项目中使用了ASP.NET AJAX控件或脚本,并且这些依赖未能正确...

    j2ee21:ajax01:get提交、post提交(完成用户名搜索),两者的区别(中文乱码问题、缓存问题)

    在IT行业中,J2EE(Java ...总的来说,理解GET和POST提交的差异,以及它们在处理中文乱码和缓存问题上的策略,对于开发高效、安全的J2EE应用至关重要。通过实践和调试,你将能够更好地掌握这些技能,提升你的编程能力。

    AJAXCache是一款jQuery缓存插件可以为ajax方法扩展缓存功能

    AJAXCache插件的引入,解决了这个问题,它允许开发者将某些AJAX请求的结果存储在本地,当下次遇到相同的请求时,可以直接从缓存中读取,避免了不必要的服务器交互。 使用AJAXCache插件,开发者可以自定义哪些AJAX...

    多个ajax同时进行

    综上所述,"多个Ajax同时进行"是一个重要的Web开发概念,涉及到如何有效地并发处理多个Ajax请求,以提高应用的性能和响应性。理解并发请求的工作原理,以及如何管理和优化这些请求,对于构建高性能的Web应用程序至关...

    一个简单JS缓存数据类

    这是一个用于缓存JS对象像(JSON,数组)都可以的一个小工具,在开发项目过程中,会比较实用。 JS对数据做缓存,应用场景,有的时候通过ajax去获取一些不是经常变动数据的时候,不用每次去请求,直接进缓存 1. 将数据...

    一个JQuery +Ajax 封闭的一个GridView控件DataGrid

    【描述】:这个项目演示了如何结合jQuery和Ajax技术,创建一个具有动态加载、分页和排序功能的GridView控件。通过Ajax无刷新更新,提供流畅的用户体验,而jQuery则用于增强DOM操作和事件处理,使得用户交互更为便捷...

Global site tag (gtag.js) - Google Analytics