Ajax请求与浏览器缓存

news/2024/10/17 22:14:40/

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

1. Ajax Request

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

1  $.ajax({
2     url : 'url',
3     dataType : "xml",
4     cache: true,
5     success : function(xml, status){    
6             }
7 });

非常简单,注意其中的第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,内容为空,这样就节省了传输数据量。


http://www.ppmy.cn/news/206041.html

相关文章

深度 | AI芯片终极之战

深度 | AI芯片终极之战 https://mp.weixin.qq.com/s?__bizMzA4MTQ4NjQzMw&mid2652712307&idx1&sn28806ccb69a5f5d1142ac5f79ccde395&chksm847dba7db30a336bfde664a5f2b75fdc443ac541483542eada358f298965614f60e3faaecf7e&scene21#wechat_redirect 2018-0…

EM78P153B封装SOP8单片机方案IC开发

台湾义隆产品型号如下:EM78P153BSO14J EM78P153B-SOP8 EM78P153KSO14J、 EM7P153KSO8J、EM78P173NSO14J、 EM78P173ND14J、EM78P173NSO8J、EM78P176NSO18J、EM78P176ND18J、 EM78P372NSO14J、 EM78P372NSO16AJ、EM78P372NSO18J、EM78P372NMS10J、EM78P372NSO20J、EM78P372NSS20…

每日学术速递6.3

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Reconstructing the Minds Eye: fMRI-to-Image with Contrastive Learning and Diffusion Priors 标题&#xff1a;重建心灵之眼&#xff1a;fMRI-to-Image with Contrastive lear…

某算数data解密

如下图&#xff0c;data是需要还原的数据 1.全局搜索decrypt 2.进入该js文件&#xff0c;搜索关键字 3.将所有含有decrypt的地方都打上断点&#xff0c;刷新页面&#xff0c;断在此处 4.向下跟&#xff0c;发现它是aes加密&#xff0c;key和iv值都在其中 5.python代码还原 imp…

echars 省份名字居中版本的chain.js

直接复制拿去用 有乱码无所谓, 直接建一个 china.js 复制进去, 即可使用 <script src"/lib/echarts/echarts.min.js" type"text/javascript" charset"utf-8"></script> <script type"text/javascript" src"js/c…

Vue设置全局loading(加载动画)功能:

1、页面的全局动画&#xff1a; <template><div class"main>......</div> </template><script> export default {data(){return{bfLoad:null,}},created(){this.getDataList()},methods:{getDataList(){//在获取页面数据的时候开启动画就会…

Echarts迁徙图

Echarts迁徙图 “echarts”: “^5.1.1”, 在node_modules中找到echarts创建map/js/.china.js /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for addition…

Echarts中使用china.js

Echarts中使用china.js 记录第一次在Vue中使用china.js china,js 是Echarts的中国地图插件&#xff0c;可以方便的实现中国地图的绘制与展示数据。 下载 可以新建一个china.js文件&#xff0c;把把下面的代码复制进去(实测不报错) china.js: ;(function (root, factory) …