前端缓存(HTTP缓存、浏览器缓存)浅析

article/2025/3/15 11:10:08

前端缓存

文章目录

  • 前端缓存
    • 缓存分类
      • 1、http缓存
        • (1)强缓存(本地缓存)
          • 启发式缓存
        • (2)协商缓存(弱缓存)
      • 2、浏览器缓存
    • 其他
      • 响应头和请求头参数
      • 刷新
        • 正常重新加载
        • 硬性重新加载
        • 清空缓存并硬性重新加载
      • 调试缓存

缓存分类

在这里插入图片描述

1、http缓存

浏览器请求流程:
在这里插入图片描述

(1)强缓存(本地缓存)

是否使用强缓存,由请求头中的如下参数决定:
Expires:格式是Fri ,24 Dec 2027 04:24:07 GMT;旧的规范,优先级比较低
Pragma:只有一个值no-cache,和Cache-Control的no-cache一样
Cache-Control
在这里插入图片描述

其中,no-cache是指使用协商缓存,每次都要跟服务器验证缓存有效期,no-store是指不使用缓存。Cache-Control和Expires同时存在时,以Cache-Control为准
在network中看到下面的就是使用了硬缓存。
在这里插入图片描述

启发式缓存

如果max-age和expires属性都没有,找找头里的Last-Modified信息。如果有,缓存的寿命就等于头里面Date的值减去Last-Modified的值除以10(注:根据rfc2626其实也就是乘以10%)。所以,没有明确的cache-control的时候,相当于cache-control:max-age=N,也就是使用了缓存期为N的强缓存,N由Date和Last-Modified决定;如果没有Last-Modified,但是有etag,Firefox也会在请求头里加上cache-control:max-age=0,chrome虽然看不到max-age=0的参数,但实际表现也是返回304。不同的浏览器可能有不同的启发式缓存算法,所以最明智的做法就是明确设置Cache-Control

(2)协商缓存(弱缓存)

ETag/If-None-Match:以一个唯一标志(ETag)作为判断是否使用缓存的标准,它被称为强校验器。资源请求的响应头里含有ETag, 客户端可以在后续的请求的头中带上 If-None-Match 头来验证缓存
Last-modify/if-Modify-Since:以时间作为判断是否使用缓存的标准,它被称为弱校验器,因为它只能精确到一秒。如果响应头里含有这个信息,客户端可以在后续的请求中带上 If-Modified-Since 来验证缓存。
在这里插入图片描述

Tips: Last-modify和ETag同时存在时,需要同时满足才返回304。Last-modify和ETag写在响应头中,if-Modify-Since和If-None-Match写在请求头中。

2、浏览器缓存

(1)本地存储
①WebStorage:localStorage和sessionStorage
②Cookie
③webSql:前端数据库,关系型数据库,但只有chrome支持,ie和firefox不支持,W3C也不支持。
④IndexedDB:前端数据库,允许储存大量数据,提供查找接口,还能建立索引,不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。
⑤Application Cache:应用程序缓存(离线缓存)
(2)默认缓存
①BFcache: 往返缓存(Back/Forward cache),浏览器行为

其他

响应头和请求头参数

其实我们在请求头和响应头里面都能看到cache-control:no-cache,那他们代表的意思有什么不一样呢。

点击查看

请求头:本次请求要怎么做

响应头:下次请求要怎么做

刷新

以谷歌浏览器为例,有正常重新加载、硬性重新加载、清空缓存并硬性重新加载三种,硬性重新加载也就是我们常说的强制刷新。

正常重新加载

平时用得最多的刷新,就是直接按F5

硬性重新加载

等同于直接按Ctrl+F5,或者在devtools的network面板中勾选Disable cache并刷新(devtools面板开启状态)。这种情况下当遇到需要加载的资源时,不会使用缓存的资源,而是重新发起请求。浏览器的处理其实就是在发出请求的时候在请求头中加上Cache-Control:no-cache和pragma: no-cache。所以也可以看出,我们的请求头是受客户端影响的,不同的客户端可能会加上不同的请求头,看到的请求头就会不一样,而响应头则是由服务器决定的,不同客户端看到的结果应该是一致的。

清空缓存并硬性重新加载

顾名思义,将该页面的缓存清空并进行硬性重新加载,那既然是硬性重新加载,清不清缓存又有什么意义呢?但实际上,页面加载后,如果是通过JS来加载内容,只是普通的硬性重新加载的话这部分的内容仍然是从缓存中加载的,清空缓存则可以保证页面内容是完全重新加载的。

调试缓存

火狐使用about:cache?storage=disk&context=

小菜鸟一枚,哪里写得不对的请赐教。


http://chatgpt.dhexx.cn/article/VTfDVd93.shtml

相关文章

前端缓存最佳实践

点击上方“前端开发博客”,选择“设为星标” 回复“2”加入前端群 作者:黑金团队https://juejin.cn/post/6844903737538920462 前言 缓存,这是一个老生常谈的话题,也常被作为前端面试的一个知识点。本文,重点在与探讨在…

技术点:前端缓存分类及使用

前端缓存 什么是 web 缓存(前端缓存) web 缓存主要指的是两部分:浏览器缓存和 http 缓存 浏览器缓存:比如,localStorage,sessionStorage,cookie 等等。这些功能主要用于缓存一些必要的数据,比如用户信息。比如需要携…

前端缓存详解

目录 前言 一、按缓存位置分类 HTTP状态码及区别 几种状态的执行顺序 Memory Cache Disk Cache Service Worker 请求网络 二、HTTP 缓存 HTTP 缓存分类 强缓存原理 协商缓存原理 更新和废弃缓存 三、缓存小结 四、缓存的优点 五、浏览器缓存策略 五、缓存的应…

一文!彻底弄懂前端缓存

前端缓存 前端缓存,这是一个老生常谈的话题,也常被作为前端面试的一个知识点。今天我们再来总结一下。 分类 前端缓存分为强缓存和协商缓存两种。 强缓存 强缓存主要使用Expires、Cache-Control 两个头字段,两者同时存在Cache-Control 优先级…

【前端页面缓存技术方案】

前端页面缓存技术方案 关于页面缓存数据的纯前端技术方案背景项目存在的现有方案思考🤔其他技术调研react-activationreact-router-cache-route 结论 关于页面缓存数据的纯前端技术方案 背景 为了优化用户的体验,可能会遇到这样的需求:在列…

前端常用缓存技术

http://www.cnblogs.com/belove8013/p/8134067.html 今天刚上班就听到群里的几位大佬在讨论所开发的系统需要重复的登录的恶心之处,听各位大佬争辩的同时,想到了自己以前整理过的缓存技术,算是比较全面的,当然了只是帮助自己理解的…

我的网站心得之缓存技术(前端篇)

在前端面试中,storage是面试官经常问的问题,我先问你几个问题,如果你回答不上来,那么你应该阅读一下:知道storage吗?storage存储的数据类型有什么?sessionStorage的生命周期?你都用l…

中高级前端工程师都需要熟悉的技能--前端缓存

前言 web缓存是高级前端工程师必修技能。是我们变成大牛过程中绕不开的知识点。 文章会尽量用通俗易懂的言语来细说web缓存的概念和用处。 本期文章的大纲是 什么是web缓存(前端缓存) 缓存可以解决什么问题?他的缺点是什么? …

ovo svm_反思我在OVO担任远程产品设计实习生的时间

ovo svm In a quiet bedroom accompanied only by the low humming of my laptop fan, I sat before a Google Hangouts meeting, and got to know my colleagues for the first time, unaware of the joy of a ride that was waiting for me at OVO Design. 在一个安静的卧室里…

反思最近这些时日的荒废

为什么80%的码农都做不了架构师?>>> 算是一时兴起,最近lol排位已经将自己的折磨的不成人样。闲了这么久,是时候找份工作了。最近一直没敢跟家里人打电话,实在不知道该说些什么,一开口便是谎言。是否自己真的…

团队愿景_周一的愿景,每日的成果,周五的远程团队管理反思

团队愿景 My friend J.D. Meier has an amazing blog called Sources of Insight and hes written a fantastic book called Getting Results the Agile Way. You can buy his book on Amazon (its free on Kindle Unlimited!). I put J.D. up there with David Allen and Step…

WPBeginner年满10岁-反思,更新和WordPress赠品(奖金124,000美元以上)

Wow, it’s the tenth fourth. Today, WPBeginner is officially 10 years old — feels unreal to type this! 哇,是第十位 今天,WPBeginner正式成立了10岁-键入此图标感到不切实际! Like every year, I want to take a few minutes and d…

误泄露公司代码、疫情期间被裁,一个“菜鸟”程序员的生存日记

作者 | Adam Hughes 译者 | Sambodhi 策划 | Tina 编辑|燕珊 “我是如何从每一次失败中成长起来的。” 身为程序员,我们往往都了解大神级程序员的故事。比如很小就开始编程,在 11 岁时就创建了第一家能盈利的网站,16 岁上大学、17…

失败需要反思

2019独角兽企业重金招聘Python工程师标准>>> 公司的第一款游戏是抄袭的COC,然而我加入进去的时候开发已过半,进入之后主要是参与一些新的系统与玩法的开发,在我加入到这个项目之后还开发了大概半年时间,据说此前已经开…

CTF笔记 个人HNCTF反思(部分题目)

文章目录 [WEEK2]easy_include自己的胡思乱想WP [WEEK2]easy_unserexp [WEEK2]easy_sqlWP [WEEK2]ez_SSTIPAYLOAD [WEEK4]pop子和pipi美总结 怎么说呢,这次充分感觉到了自己的无能,可能因为在比赛马上结束的时候加入,让我没心思慢慢思考&…

一名大学毕业生的反思_反思我大学毕业时的软件工程师的第一年

一名大学毕业生的反思 Note: This post is mainly targeted towards students who are about to graduate or have already graduated and are preparing to start their new full-time job. Some of the examples used are specific to my experience as a New Grad Software …

华清远见嵌入式培训_第二周回顾与反思

目录 前言 周一 一、switch..case 1.1 注意事项 1.2 使用练习 二、循环控制语句 2.1 使用goto实现循环 2.2 while循环 2.3 do..while 循环 2.4 for 循环 2.5 死循环 2.6 辅助控制关键字 周二 一、数组 1.1 一维数组 1.2 数组越界问题 1.3 二维数组 1.4 编码练…

让计算机开口说话教学反思,英语教学反思(合集15篇)

英语教学反思(合集15篇) 身为一位优秀的老师,课堂教学是我们的工作之一,借助教学反思我们可以快速提升自己的教学能力,我们该怎么去写教学反思呢?以下是小编为大家收集的英语教学反思,希望能够帮助到大家。 英语教学反…

华清远见嵌入式培训_第五周回顾与反思

前言 这是在华清学习的第五个周末,这一周主要学习的是数据结构。老师说数据结构是一门非常庞大的学科,单单是数据结构里的一个小分支,单拎出来一周都未必可以学透,因此这周的数据结构课程里更多的是思维方向的学习,学习…

利用Python识别txt文本并根据其内容进行文件分类

事情是这样的,有一个图片数据集需要根据分成很多类以便于给其设置标签,但所有的图片都在一个文件里,另外又给了个.txt文件,其中每行都是对应图片的类别。例如第1行对应的第0001.jpg是第14类(每个类都有多张图片&#x…