前端浏览器缓存机制

article/2025/3/15 6:14:39

目录

  • 1 缓存定义及其优点
  • 2 强缓存
    • 2.1 expires 和 Cache-Control
  • 3 协商缓存
  • 4 浏览器缓存位置

1 缓存定义及其优点

什么是缓存?
当我们第一次访问网站的时候,电脑会把网站上的图片和数据下载到电脑上,当我们再次访问的时候,网站就会从电脑中直接加载出来,这就是缓存。比如我们访问网页点击后退功能的时候,加载的非常快,这就是缓存的优势。
缓存优点:
1 缓存服务器压力,不用每次都去请求某些数据了
2 提升性能,打开本地资源肯定会比请求服务器更快
3 减少带宽消耗,当我们使用缓存时,只会产生很小的网络消耗。
浏览器缓存过程:
强缓存
协商缓存
强缓存与协商缓存的区别:
强缓存不发请求到服务器,所以有时候资源更新了浏览器还不知道,但是协商缓存会发请求到服务器,所以资源是否更新,服务器肯定知道。
大部分web服务器都默认开启协商缓存
浏览器缓存位置
Service Worker
Memory Cache
Disk Cache
Push Cache

2 强缓存

       强缓存是当我们访问URL的时候,不会向服务器发送请求,直接从缓存中读取资源,但是会返回200的状态码。

如何设置强缓存?

       我们第一次进入页面,请求服务器,服务器会进行应答,浏览器根据服务器的应答respon Header来判断是否对资源进行缓存,如果响应头中有expires、pragma或cache-control字段,代表是强缓存,浏览器就会把资源缓存在memory cache 或 disk cache中。

       第二次请求时,浏览器判断请求参数,如果符合强缓存条件就直接返回状态码200,从本地缓存中拿数据。否则把响应参数存在request header请求中,看是否符合协商缓存,符合则返回状态码304,不符合则服务器返回全新资源。

在这里插入图片描述

2.1 expires 和 Cache-Control

  1. Cache-Control 是HTTP1.1 中新增的响应头
  2. Expires 是HTTP1.0 中的响应头
  3. Cache-Control 使用的是相对时间
  4. Expires 指定的是具体的过期时间而不是秒数。
  5. Cache-Control 和 Expires同时使用的话,Cache-Control 会覆盖Expires

       Expires:设置浏览器缓存时间,时间是绝对时间,从设置的值上可以看出是个日期,浏览器收到Response时看看有没有Expires字段有的话缓存头信息和资源,再次请求时查看缓存时间过没过,没过在缓存拿出来,过了重新请求。

Cache-Control都可以设置哪些属性
max-age(单位为s):指定设置缓存最大的有效时间,定义的是时间长短。当浏览器向服务器发送请求后,在max-age这段时间里浏览器就不会再向服务器发送请求了。
public : 指定响应可以在代理缓存中被缓存,于是可以被多用户共享。如果没有明确指定private,则默认为public。
private : 响应只能在私有缓存中被缓存,不能放在代理缓存上。对一些用户信息敏感的资源,通常需要设置为private。
no-cache : 表示必须先与服务器确认资源是否被更改过(依靠If-None-Match和Etag),然后再决定是否使用本地缓存。
no-store : 绝对禁止缓存任何资源,也就是说每次用户请求资源时,都会向服务器发送一个请求,每次都会下载完整的资源。通常用于机密性资源。

在这里插入图片描述
服务端如何判断缓存已失效?

浏览器或代理缓存中缓存的资源过期了,并不意味着它和原始服务器上的资源有实际的差异,仅仅意味着到了要进行核对的时间了。这种情况被称为服务器再验证。
如果资源发生变化,则需要取得新的资源,并在缓存中替换旧资源。
如果资源没有发生变化,缓存只需要获取新的响应头,和一个新的过期时间,对缓存中的资源过期时间进行更新即可

HTTP1.1推荐使用的验证方式是If-None-Match/Etag,在HTTP1.0中则使用If-Modified-Since/Last-Modified。

3 协商缓存

触发条件

Cache-Control 的值为 no-cache (不强缓存)
或者 max-age 过期了 (强缓存,但总有过期的时候)

当浏览器判断不是强缓存,就会向服务器发请求,判断是否是协商缓存。如果是,服务器会返回304 Not Modified,浏览器从缓存中加载。

Last-Modified和If-Modified-Since字段

1、浏览器第一次向服务器发请求,服务器返回资源并在response header加上Last-Modified字段,表示资源最后修改的时间。
2、浏览器再次请求这个资源时,请求头会加上If-Modified-Since字段。若这两个字段一样,说明资源没有修改过,返回304Not Modified,浏览器从缓存中获取资源。若这两个字段不一样,说明资源修改过,服务器正常返回资源。

在这里插入图片描述在这里插入图片描述

ETag、If-None-Match

但有时候服务器上资源有变化,单最后修改时间没更新,则引出下面两个字段。
1、浏览器第一次向服务器请求,服务器返回资源并在response header上加ETag字段。表示资源本身,资源有变化,则该字段有变化。
2、浏览器再次向服务器请求这个资源时,请求头携带If-None-Match字段。若这两个字段相同,则代表资源没有变化,服务器返回304Not Modified,浏览器从缓存中加载。若两个字段不同,证明资源有变动,服务器正常返回资源。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

4 浏览器缓存位置

        查找浏览器缓存时会按顺序查找: Service Worker–>Memory Cache–>Disk Cache–>Push Cache。

1 Service Worker
是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。使用 Service Worker的话,传输协议必须为 HTTPS。因为 Service Worker 中涉及到请求拦截,所以必须使用 HTTPS 协议来保障安全。Service Worker 的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的
2 Memory Cache
内存中的缓存,主要包含的是当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,可是缓存持续性很短,会随着进程的释放而释放。一旦我们关闭 Tab 页面,内存中的缓存也就被释放了。
3 Disk Cache
存储在硬盘中的缓存,读取速度慢点,但是什么都能存储到磁盘中,比之 Memory Cache 胜在容量和存储时效性上。
       在所有浏览器缓存中,Disk Cache 覆盖面基本是最大的。它会根据 HTTP Herder 中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。并且即使在跨站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。绝大部分的缓存都来自 Disk Cache。
4 Push Cache
Push Cache(推送缓存)是 HTTP/2 中的内容,当以上三种缓存都没有命中时,它才会被使用。它只在会话(Session)中存在,一旦会话结束就被释放,并且缓存时间也很短暂,在Chrome浏览器中只有5分钟左右,同时它也并非严格执行HTTP头中的缓存指令。
5 CPU、内存、硬盘
这里提到了硬盘,内存,可能有些小伙伴对硬盘,内存没什么直观的概念。
       CPU、内存、硬盘都是计算机的主要组成部分。
       CPU:中央处理单元(CntralPocessingUit)的缩写,也叫处理器,是计算机的运算核心和控制核心。电脑靠CPU来运算、控制。让电脑的各个部件顺利工作,起到协调和控制作用。
       硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。
       内存:负责硬盘等硬件上的数据与CPU之间数据交换处理。特点是体积小,速度快,有电可存,无电清空,即电脑在开机状态时内存中可存储数据,关机后将自动清空其中的所有数据。

参考链接


http://chatgpt.dhexx.cn/article/0G9nbUoe.shtml

相关文章

前端缓存机制

目录 前言 目的 缓存过程分析 强制缓存(强缓存) 强制缓存的缓存规则 浏览器的缓存存放在哪里 协商缓存 更新缓存 合理应用缓存 前言 对于浏览器缓存,每个前端开发者应该都不会陌生,同时它也是我们在日常开发中存在的一个…

前端缓存【web缓存】

前端缓存--http缓存 web缓存http缓存定义优点缺点http缓存类型 强缓存Expires实现的强缓存Cache-control实现的强缓存 协商缓存last-modified实现的协商缓存ETag实现的协商缓存缺点 设置缓存文件缓存(html、js、css、png)总结 web缓存 web缓存主要指:浏…

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

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

前端缓存最佳实践

点击上方“前端开发博客”,选择“设为星标” 回复“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 编码练…