千家信息网

Ajax请求与浏览器缓存的示例分析

发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章主要为大家展示了"Ajax请求与浏览器缓存的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Ajax请求与浏览器缓存的示例分析"这篇文章吧。
千家信息网最后更新 2025年11月06日Ajax请求与浏览器缓存的示例分析

这篇文章主要为大家展示了"Ajax请求与浏览器缓存的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Ajax请求与浏览器缓存的示例分析"这篇文章吧。

在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度。

1. Ajax Request

使用jQuery框架可以很方便的进行Ajax请求,示例代码如下:

$.ajax({  url : 'url',  dataType : "xml",  cache: true,  success : function(xml, status){        }});

非常简单,注意其中的第4行代码:cache:true,显式的要求如果当前请求有缓存的话,直接使用缓存。如果该属性设置为 false,则每次都会向服务器请求,Jquery的Comments如下:

If set to false, it will force requested pages not to be cached by the browser. Setting cache to false also appends a query string parameter, "_=[TIMESTAMP]", to the URL.

前端的工作也就这么多了,这样的话Ajax请求就可以利用浏览器缓存了吗?

继续看。

2. Http 协议

Http协议的header部分定义了关于客户端是否应该做Cache,以及如何做Cache。具体参见Http Header Field Definitions 的 14.9 Cache-Control 和 14.21 Expires。这里简单说一下:

Cache-Control

Cache-control用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了Pragma: no-cache)

数据包中的格式:

Cache-Control: cache-directive

cache-directive可以为以下:

request时用到:

| "no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| "cache-extension"

response时用到:

| "public"
| "private" [ "=" <"> field-name <"> ]
| "no-cache" [ "=" <"> field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| "cache-extension"

说明:

-Public 指示响应可被任何缓存区缓存。

-Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

-no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换)

-no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

-max-age 指示客户端可以接收生存期不大于指定时间(以秒为单位)的响应。

-min-fresh 指示客户端可以接收响应时间小于当前时间加上指定时间的响应。

-max-stale 指示客户端可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户端可以

接收超出超时期指定值之内的响应消息。

Expires

Expires 表示Cache的有效时间,允许客户端在这个时间之前不去发请求,等同max-age的效果。但是如果同时存在,则被Cache-Control的max-age覆盖。
格式:Expires = "Expires" ":" HTTP-date
示例:Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified

Last-Modified用GMT格式表明了文档的最后修改时间,客户端第二次请求此URL时,会在头部加入一个属性,询问该时间之后文件是否有被修改过。如果服务器端的文件没有被修改过,则返回状态是304,内容为空,这样就节省了传输数据量。

3. 我的问题

这几天在做Web前端的时候,发现客户端的每次Ajax都会从服务器端请求数据,而这些数据的即时性没有那么高,没必要每次都请求。

在显式的给Ajax加上cache为true后,发现问题依旧。于是怀疑是服务端的问题,服务端使用 jersey 搭建了基于Restful的服务,代码片段如下:

@GET@Produces("application/xml")public Response getProducts() {     Response.ResponseBuilder response = Response.ok(data);     return response.build();}

添加Cache控制后,进行测试,一切OK。

最后的代码如下:

@GET@Produces("application/xml")public Response getProducts() {     Response.ResponseBuilder response = Response.ok(data);     // Expires 3 seconds from now..this would be ideally based     // of some pre-determined non-functional requirement.     Date expirationDate = new Date(System.currentTimeMillis() + 3000);     response.expires(expirationDate);     return response.build();}

只是示例代码,还可以进行更精细的控制,例如使用CacheControl、Last-Modified等等。

以上是"Ajax请求与浏览器缓存的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

缓存 消息 客户 时间 客户端 服务 示例 代码 指示 浏览器 浏览 内容 数据 服务器 部分 分析 前端 格式 用户 端的 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术优点 河北省软件开发专业的学校 电子信息包括软件开发吗 机器学习服务器申请 东丽区电子网络技术不二之选 网络安全法 日志60天 数据库运维技术协议 大话西游2最美服务器名字 中美专线云服务器 2021年网络安全宣传周节目 重庆潼南网络生鲜软件开发 武汉合发合缘网络技术有限公司 工业网络安全现状 服务器如何防止托管数据丢失 网络安全个人信息范围是什么 mysql数据库怎么退格 碧蓝航线莱特湾服务器 资阳软件开发专业定制 柳州天气预报软件开发 南充展厅多媒体软件开发 软件开发实训生有哪些工作 求生之路2怎么自动连接服务器 兰州招网络安全服务工程 安徽联想服务器维修系统云主机 网络安全的手抄报内容图片 重庆合川蔬菜软件开发 深圳市海源鸿软件开发商行 广州巡检管理软件开发公司 序列数据库DNA比对工具 青岛软件开发薪资
0