缓存相关知识点

2023-05-16

缓存的优点

1、减少不必要的数据传输,节省带宽

2、减轻服务器负担,提升网站性能

3、加快客户端网页加载速度

4、用户体验更好

缺点

如果资源发生更改,客户端不及时更新会导致用户获取信息滞后

缓存类型

分为强缓存(本地缓存)和弱缓存(又称协商缓存)

浏览器在向服务器第一次发起请求某资源时,服务端就会在respose的header内对该资源做缓存配置。缓存的时间和类型都是由服务端控制。

当浏览器再次向该资源发起请求时,首先会去获取该资源第一次请求时缓存的响应报文的header信息,判断是否命中强缓存和expries信息,若命中,直接从缓存中获取资源信息,本次请求根本就不会与服务器通信。

如果未命中,浏览器就发送请求到服务器,请求会携带第一次请求返回的响应报文的header信息,由服务器根据这个header信息来比对服务器端的的信息,判断是否命中协商缓存。如果命中,服务器返回新的响应header信息,并更新缓存中对应的header信息,但是并不会返回资源内容,而是告诉浏览器可以直接从缓存中获取,否则返回最新的资源内容。

有关强缓存的header字段

1、expries

这是http1.0的规范,它的值是一个绝对时间的GMT格式的时间字符串,如果请求的时间在expries之前,那么本地缓存始终有效,否则会发送请求到服务器获取资源。

2、cache-control

这是http1.1时出现的header信息,主要利用该字段的max-age值来判断,它是一个相对时间。资源第一次请求得时间和max-age的有效时间,计算出一个资源过期时间。把请求时的时间拿来与这个时间比较,如果请求时间在过期时间之前,就能命中缓存,否则就不行。

cache-control除了max-age外,还有几个常用值。

2.1、no-cache:不使用本地缓存,需要使用协商缓存。先与服务器确认第一次请求返回的响应是否被修改,如果之前header中存在Etag,那么请求得时候会与服务器验证,如果资源未被修改则可以避免重新下载

2.2、no-store:禁止浏览器缓存数据,每次客户端请求该资源,都会向服务器发送一个请求,每次都会下载完整资源

2.3、public:可以被所有用户缓存,包括终端用户和cdn等中间代理服务器

2.4、private:只能被终端用户缓存

注意:

如果cache-control与expries同时存在时,强缓存cache-control优先级高

协商缓存有关的header字段

协商缓存是由服务器来确定缓存资源是否可用,见名之意,“协商”就是两个人之间交流一个方案,这里的双方就是客户端和服务器,因此客户端和服务端需要某种标识来进行通信,从而让服务器判断请求资源是否可以访问缓存,涉及两组header字段。

这两组字段成对存在,第一次请求资源得到的响应报文中header字段中如果存在Last-Modified,则后续请求时就会带上if-Modified-Since请求字段;如果一次请求资源得到的响应报文中header字段中是Etag,那么再次请求时则会带上if-None-Match字段。

Last-Modified和if-Modified-Since   Etag和if-Node-Match这两对是一一对应的。

1、Last-Modified和if-Modified-Since

两者的值都是GMT格式的时间字符串

浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的时候,在reponse的header加上了Last-Modefied,它的表示这个资源在服务器上最后修改的时间;

浏览器再次跟服务器请求这个资源的时候,在request的header加上if-Modified-Since,它的值就是上一次请求时返回的Last-Modefined的值。

服务器再次收到资源请求时,根据浏览器传过来的if-Modified-Since的值和服务器上最后修改时间判断资源是否变化,如果没有变化返回304 Not Modified,但是不会返回资源内容,如果有变化就返回资源内容。

当服务器返回304状态的时候,response的header中不会再添加Last-Modified,因为资源没有改变,那么Last-Modified也不会改变,当浏览器收到304的响应时,就会从缓存中获取资源。

如果协商缓存没有命中,浏览器从服务器加载资源时,Last-Modified的值会被重新更新并加在response的header上返回给客户端,下次请求时if-Modified-Since的值就会启动上次请求返回的Last-Modified的值。

2、Etag和if-None-Match

这两个值是由服务器生成的每个资源的唯一标识字符串,只要资源有变化这个值就会改变;其判断过程与 Last-Modified、If-Modified-Since类似,与 Last-Modified 不一样的是,当服务器返回304的时候, 由于Etag重新生成过,response header会把这个Etag返回,即使这个Etag跟之前的没有变化。

Modified与ETag可以一起使用,服务器会优先验证ETag, 一致的情况下才会比对Last-Modifed

补充:

HTTP1.1新增的Etag,是为了解决几个Last-Modified难以解决的问题:

1、一些文件可能会发生周期性的更改,但是内容并没有发生变化(仅仅改变的修改时间),这个时候我们并不希望客户端认为我们修改了,而从新返回资源。

2、某些文件修改非常频繁,比如在秒以下的时间内进行修改,这种修改无法判断,某些服务器不能精确得到这个文件的最后修改时间。

这时可以利用Etag能够更加精确的控制缓存。

缓存相关的技术

前端的三种缓存技术:cookie、localStorage、sessionStorage(后两者是h5的时候新出的两种前端缓存技术)

localStorage、sessionStorage、cookie三者的区别

(1)存储大小

cookie数据大小不能超过4k ;

sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大;

(2)有效时间

localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;

sessionStorage 数据在当前浏览器窗口关闭后自动删除;

cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭;

(3)数据与服务器之间的交互方式

cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端;

sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存;

(4)作用域

localStorage的作用域限制在文档源的;

localStorage同源的文档之间可以相互访问和修改相同名称的数据;

localStorage受浏览器厂商的限制,chrome下存储的数据,360浏览器下不可访问; 会得到‘Invalid Date’;

sessionStorage在localStorage的同源策略基础之上,还有更严格的限制:

他还被限制在窗口中,意思是同一个窗口或标签页的不同页面之间可以共享sessionStorage;

但是不同的窗口或标签页之间不能共享sessionStorage,即便他们是同一个页面地址;

这里的窗口是顶级窗口,如果里面有多个iframe,他们之间共享sessionStorage;
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓存相关知识点 的相关文章

  • 用java实现学生成绩管理系统(附有详细代码)

    1 需求 添加学生 xff1a 通过键盘录入学生信息 xff0c 添加到集合中删除学生 xff1a 通过键盘录入需要删除学生的学号 xff0c 将该学生对象从集合中删除修改学生 xff1a 通过键盘录入需要修改学的学号 xff0c 将该学生
  • WIN远程访问Centos7桌面,vnc,xrdp

    1 引言 众所周知 xff0c 远程登录linux桌面时 xff0c 操作GUI非常卡顿 xff0c 其流畅度取决于网络 vnc服务可以很好的解决这个问题 xff0c 对于vnc服务除了使用vnc view登录以外 xff0c 本文介绍了在
  • Android超级好看的动态登陆界面(附有详细代码)

    首先先演示一下动态的效果 QQ视频20220819164103 从视频效果中 xff0c 看到这个动态的登陆界面还是比较好看的 xff0c 下面开始介绍如何制作这个动态的登陆界面 一 首先书写静态页面 activity mian xml l
  • 动态规划 — 最长递增子序列(从原理到实现详解)

    关注我 xff0c 解锁更多算法知识 xff01 https blog csdn net m0 58941767 spm 61 1000 2115 3001 5343 目录 前言 一 动态规划解法 二 二分查找法 关注我 xff0c 持续分
  • Android轻松实现图片的圆形化处理(基于xml文件快速实现)

    会持续发布关于Android系列文章以及小技巧 xff0c 好用的第三方库等等 目录 前言 一 引入第三方依赖库 二 使用方法 总结 前言 大家知道 xff0c 在Android应用开发中 xff0c 对于图形的处理是非常重要的 xff0c
  • Android基础一:Android UI基础容器

    从今天开始 xff0c 我来分享一些关于Android的一些基础知识 xff0c 感兴趣一起来学啊 xff01 大学生交流群 xff1a 728910358 目录 前言 二 相对布局RelativeLayout 三 帧布局FrameLayo
  • Android基础二:常见的几种组件

    关注我 xff0c 会持续发布关于Android学习的内容 xff01 大学生交流群 xff1a 728910358 文章目录 前言 一 MaterialButton 二 MaterialButtonToggleGroup 三 TextVi
  • Android基础三:RecyclerView组件的使用

    目录 系列文章目录 前言 二 GridLayoutManager 网格布局 三 StaggeredGridLayoutManager 瀑布流布局 总结 系列文章目录 Android基础一 xff1a Android UI基础容器 https
  • 《Linux创建新用户》

    本文主要讲解linux下如何进行新用户创建 登录以及删除操作 文章目录 1 创建新普通用户2 登录普通用户 xff08 一 xff09 已经创建过普通用户 xff08 二 xff09 第一次创建普通用户 3 普通用户切换至超级用户 xff0
  • 通用文字识别API推荐

    今天给大家分享推荐一款很不错的API 通用文字识别OCR xff0c 多场景 多语种 高精度的整图文字检测和识别服务 xff0c 多项指标行业领先 xff0c 可识别中 英 日 韩 法 德多种语言 APISpace 上面有各种各样的API
  • 一文带你看透手机号码归属地

    什么是手机号码归属地 xff1f 我国的手机号码为11位 xff0c 前3位是区分运营商的移动接入码 xff0c 中国的移动接入码都是以1开头的 xff0c 比如131 139 138等等 xff0c 这个移动接入码是由运营商向工信部申请
  • 一文带你看透IP归属地

    什么是IP xff1f IP是指网络之间互连的协议 xff0c 英文全称是 Internet Protocol xff0c 是TCP IP体系中的网络层协议 设计IP的目的是提高网络的可扩展性 xff1a 一是解决互联网问题 xff0c 实
  • Linux arm64架构修改软件源 (统信UOS,麒麟系统修改阿里源、华为源) 国产系统UOS修改apt源

    步骤 xff1a 备份原来自带的软件源 gt 修改软件源配置文件 gt 处理报错 xff08 公钥问题 xff09 gt 清理缓存 gt 更新缓存 gt 安装软件 1 备份系统之前的源 cp etc apt sources list etc
  • 各类免费API接口推荐,再也不怕找不到免费API了

    我收集了一些各类免费的API xff0c 在这里分享给大家 xff0c 希望可以帮助到大家 一 高德开放平台 与真实世界联通 高德开放平台为开发者赋能 xff0c 将地图精致地呈现在您的应用中无论基于哪种平台 xff0c 都可以通过高德开放
  • APISpace 的 ChatGPT 它来了 一分钟快速接入没烦恼

    如此火爆的 ChatGPT 大家肯定都已经知道了 xff0c 我就不多说了 但是呢 xff0c OpenAI 的 ChatGPT 官网注册麻烦 xff0c 接入繁琐 xff0c 且需要海外信用卡才能支付 xff0c 这就让广大的国内开发者头
  • ChatGPT 到底强大在哪里?(文末有彩蛋)

    ChatGPT 是由 OpenAI 开发的一个人工智能聊天机器人程序 xff0c 于2022年11月推出 该程序使用基于 GPT 3 5 架构的大型语言模型并通过强化学习进行训练 ChatGPT 以文字方式交互 xff0c 而除了可以通过人
  • 免费常用API接口

    短信API 短信验证码 xff1a 可用于登录 注册 找回密码 支付认证等等应用场景 支持三大运营商 xff0c 3秒可达 xff0c 99 99 xff05 到达率 xff0c 支持大容量高并发 通知短信 xff1a 当您需要快速通知用户
  • 安全可靠的短信验证码API,毫秒级反应

    短信验证码是一种功能强大的网络安全技术 xff0c 可以确保网站的真实性和安全性 它的使用非常简单 xff1a 用户只需要通过他 她的手机发送位编码短信给网站 xff0c 然后在网站上输入这个验证码 xff0c 就可以实现一种双重认证的功能
  • 如何利用 IP 归属地查询 API 精准锁定用户位置

    引言 在互联网时代 xff0c IP 地址扮演着非常重要的角色 xff0c 它可以帮助我们追踪网站访问者 优化网络服务等等 而 IP 归属地则更进一步 xff0c 它可以帮助我们精确地定位 IP 地址所在的地理位置 xff0c 为数据分析
  • 涨知识!细数银行卡三要素 API 的 N 种验证方法

    引言 银行卡三要素验证 API 是一种基于姓名 身份证号码和银行卡号等三种信息的验证服务 xff0c 主要用于绑定银行卡时校验银行卡是否为该身份信息所有 手机号是否为银行卡绑定手机号 银行卡三要素 API 的验证方法 银行卡三要素 API

随机推荐

  • 常用的热门 API 分享

    手机号码归属地 xff1a 提供三大运营商的手机号码归属地查询 空号检测 xff1a 通过手机号码查询其在网活跃度 xff0c 返回包括空号 停机等状态 手机在网状态 xff1a 支持传入三大运营商的号码 xff0c 查询手机号在网状态 x
  • 通知短信 API 技术细节以及发送流程机制原理解析

    引言 短信是一种简单 直接 高效的通信方式 xff0c 被广泛应用于各个领域 在移动互联网时代 xff0c 短信成为了客户服务 政府通知 公共服务等方面的重要工具 为了更好地利用短信这种通信方式 xff0c 通知短信 API应运而生 短信A
  • vSphere ESXI主机网络分析工具

    1 net stats 该命令可以收集端口统计信息 可以通过net stats h 命令显示所有标志 最常见的是使用 net stats l 来确定所有 VMkernel 接口 vmnic 上行链路和 vNIC 端口的交换机端口号和 MAC
  • 算法中的一些数学问题

    1 欧几里得算法 xff08 辗转相除法 xff09 该算法用来快速计算两个整数的最大公约数 递归算法 xff1a int gcd int a int b if b 61 61 0 return a return gcd b a b 非递归
  • 安装pillow已完成,但仍报错No module named ‘PIL‘

    python 3 6 2 xff0c 安装pillow已完成 xff0c 但仍报错No module named 39 PIL 39 no module named 39 pillow 39 python3 6 我加班还不行吗 的博客 CS
  • 使用汇编语言与C语言实现LED1/LED2/LED3三盏灯点亮

    汇编语言代码段 text global start start LED1点灯LED1 gt PE10 64 1 对LED1进行初始化 RCC AHB4 ENSETR MODER OTYPER OSPEEDR PUPDR 64 2 实现LED
  • linux移动文件夹

    使用命令mv 要移动的文件夹 目标文件夹 假如我要将root下的文件amelia txt移动到opt下的文件夹software中 xff0c 我可以使用命令mv root amelia txt opt software amelia txt
  • docker安装nextcloud,聪明人已经收藏了!

    1 为什么要使用分布式锁 使用分布式锁的目的 xff0c 无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作 1 1举一个很长的例子 系统 A 是一个电商系统 xff0c 目前是一台机器部署 xff0c 系统中有一个用户下订单的接口
  • CCF CSP 序列查询新解

    CCF CSP 序列查询新解 C语言 题目背景 上一题 序列查询 中说道 xff1a A 61 A0 A1 A2 An 是一个由 n 43 1 个 0 N 范围内整数组成的序列 xff0c 满足 0 61 A0 lt A1 lt A2 lt
  • 打开edge,出现错误代码: STATUS_ACCESS_DENIED,解决方法

    问题描述 xff1a 这个问题 xff0c 一般显示edge页面加载失败 xff0c 且电脑右下角出现弹窗 解决办法 xff1a 此时 xff0c 你可以到C盘 xff0c 把Microsoft下的子文件删掉 xff0c 注意最好用dele
  • JS的表达式

    一 原始表达式 1 表达式是js的代码形式 2 原始表达式包含直接量 关键字和变量名 xff1b lt script gt 直接量 100 xff1b 200 2 xff1b 34 hi 34 关键字 True False 变量名 a 函数
  • JS的DOM操作——style的操作

    对于JS操作文档中的元素 xff0c 改变其的样式特征需要用到一个属性 style 常见操作 xff1a 获取的元素点 xff08 xff09 style xx 需要设置或修改的属性 代码演示 xff1a 例如修改div块的背景颜色 lt
  • 学会iframe并用其解决跨域问题

    了解iframe 官方定义为 xff1a iframe是HTML标签 xff0c 作用是文档中的文档 xff0c 或者浮动的框架 FRAME iframe元素会创建包含另外一个文档的内联框架 xff08 即行内框架 xff09 简单理解为
  • Vue中的样式绑定

    我们将样式绑定分为两种 xff1a 一种是通过style绑定 xff0c 一种是通过class绑定 样式绑定适用于 切换效果的实现 xff0c 小规模用style xff0c 大规模用class style绑定样式 这里需要用到v bind
  • 51 汇编语言编程:8个按键控制8个LED

    89C51汇编语言写8个按键控制8个LED 按键接P2口 xff0c LED接P1口 有6按键 xff0c 按下对应LED长亮 xff0c 重复按下 xff0c LED灭 xff1b 有两个特殊按键 xff0c 按下 xff0c 对应LED
  • 常见的排序算法

    今天来学习一下数据结构课程中非常重要的排序算法 我们学习一下一些常见的排序算法 xff0c 如冒泡排序 选择排序 快速排序等 1 冒泡排序 实现思路 xff1a 对未排序的各元素从头到尾依次比较相邻的两个元素大小关系 如果左边的队员大 则两
  • Vue的仓库vuex

    Vue js是一个渐进式的框架 xff0c 是一个分层的设计模式 一共分为五层 xff0c 核心库为基础 xff0c 在这基础上添加组件系统 客户端路由 大规模状态管理和开发环境 其中大数据状态管理对应的技术就是vuex xff0c 它是由
  • vue3.0的setup函数以及解决其内的数据不是响应式数据的问题

    相比于2 0 xff0c vue3 0在新增了一个setup函数 xff0c 我们在setup中可以写数据也可以写方法 xff0c 就像我们以前最开始学习js一样 xff0c 在js文件中写代码 如 xff1a setup let name
  • setup中使用watch

    watch属性监听器的作用在vue3 0中没有改变 xff0c 还是监听值得变化 在vue3 0中 xff0c 仍然支持watch配置项 但是我们要在setup中使用watch得话 xff0c 我们要导入watch的API xff0c 然后
  • 缓存相关知识点

    缓存的优点 1 减少不必要的数据传输 xff0c 节省带宽 2 减轻服务器负担 xff0c 提升网站性能 3 加快客户端网页加载速度 4 用户体验更好 缺点 如果资源发生更改 xff0c 客户端不及时更新会导致用户获取信息滞后 缓存类型 分