浏览器缓存详解

Web 缓存介绍
Web 缓存是指一个 Web 资源(如 html 页面,图片,js,数据等)存在于 Web 服务器和客户端(浏览器)之间的副本。
缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的 URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。

Web 缓存的好处
减少网络延迟,加快页面打开速度
减少网络带宽消耗
降低服务器压力

根据什么规则缓存
新鲜度(过期机制):
也就是缓存副本有效期。一个缓存副本必须满足以下条件,浏览器会认为它是有效的,足够新的:

  • 含有完整的过期时间控制头信息(HTTP 协议报头),并且仍在有效期内;
  • 浏览器已经使用过这个缓存副本,并且在一个会话中已经检查过新鲜度;

校验值(验证机制):服务器返回资源的时候有时在控制头信息带上这个资源的实体标签 Etag(Entity Tag),它可以用来作为浏览器再次请求过程的校验标识。如果发现校验标识不匹配,说明资源已经被修改或过期,浏览器需求重新获取资源内容。

HTTP 缓存的两个阶段
浏览器缓存一般分为两类:强缓存(也称本地缓存)和协商缓存(也称弱缓存)。
本地缓存阶段
浏览器发送请求前,会先去缓存里查看是否命中强缓存,如果命中,则直接从缓存中读取资源,不会发送请求到服务器。否则,进入下一步。

协商缓存阶段
当强缓存没有命中时,浏览器一定会向服务器发起请求。服务器会根据 Request Header 中的一些字段来判断是否命中协商缓存。如果命中,服务器会返回 304 响应,但是不会携带任何响应实体,只是告诉浏览器可以直接从浏览器缓存中获取这个资源。如果本地缓存和协商缓存都没有命中,则从直接从服务器加载资源。

启用&关闭缓存
按照本地缓存阶段和协商缓存阶段分类:
在这里插入图片描述
在 HTTP 请求和响应的消息报头中,常见的与缓存有关的消息报头有:
在这里插入图片描述

  • Cache-Control:HTTP1.1 提出的特性,为了弥补 Expires
    缺陷加入的,提供了更精确细致的缓存功能。详细了解详细看几个常见的指令:_ max-age:功能和 Expires类似,但是后面跟一个以“秒”为单位的相对时间,来供浏览器计算过期时间。_ no-cache:提供了过期验证机制。

在这里插入图片描述

  • Expires:HTTP1.0 的特性,标识该资源过期的时间点,它是一个绝对值,格林威治时间(Greenwich Mean Time,GMT),即在这个时间点之后,缓存的资源过期;优先级:Cache-Control 优先级高于Expires,为了兼容,通常两个头部同时设置;浏览器默认行为:其实就算 Response Header 中沒有设置Cache-Control 和Expires,浏览器仍然会缓存某些资源,这是浏览器的默认行为,是为了提升性能进行的优化,每个浏览器的行为可能不一致,有些浏览器甚至没有这样的优化。

Last-Modified(Response Header)与 If-Modified-Since(Request Header)是一对报文头,属于 http 1.0。

If-Modified-Since 是一个请求首部字段,并且只能用在 GET 或者 HEAD 请求中。Last-Modified 是一个响应首部字段,包含服务器认定的资源作出修改的日期及时间。
当带着 If-Modified-Since 头访问服务器请求资源时,服务器会检查 Last-Modified,如果 Last-Modified 的时间早于或等于 If-Modified-Since 则会返回一个不带主体的 304 响应,否则将重新返回资源。
在这里插入图片描述

ETag 与 If-None-Match 是一对报文头,属于 http 1.1

ETag 是一个响应首部字段,它是根据实体内容生成的一段 hash 字符串,标识资源的状态,由服务端产生。If-None-Match 是一个条件式的请求首部。如果请求资源时在请求首部加上这个字段,值为之前服务器端返回的资源上的 ETag,则当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的时候,服务器才会返回带有所请求资源实体的 200 响应,否则服务器会返回不带实体的 304 响应。
在这里插入图片描述
ETag 能解决什么问题?
a. Last-Modified 标注的最后修改只能精确到秒级,如果某些文件在 1 秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度;
b. 某些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),但 Last-Modified 却改变了,导致文件没法使用缓存;
c. 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形。
优先级:ETag 优先级比 Last-Modified 高,同时存在时会以 ETag 为准。
在这里插入图片描述

以下额外补充

200 from memory cache
表示不访问服务器,直接从内存中读取缓存。因为缓存的资源保存在内存中,所以读取速度较快,但是关闭进程后,缓存资源也会随之销毁,一般来说,系统不会给内存分配较大的容量,因此内存缓存一般用于存储较小文件。同时内存缓存在有时效性要求的场景下也很有用(比如浏览器的隐私模式)。

200 from disk cache
表示不访问服务器,直接从硬盘中读取缓存。与内存相比,硬盘的读取速度相对较慢,但硬盘缓存持续的时间更长,关闭进程之后,缓存的资源仍然存在。由于硬盘的容量较大,因此一般用于存储大文件。

下图可清晰看出差别:
在这里插入图片描述
200 from prefetch cache
在 preload 或 prefetch 的资源加载时,两者也是均存储在 http cache,当资源加载完成后,如果资源是可以被缓存的,那么其被存储在 http cache 中等待后续使用;如果资源不可被缓存,那么其在被使用前均存储在 memory cache。
在这里插入图片描述
CDN Cache
以腾讯 CDN 为例:X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存;X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘;X-Cache-Lookup:Hit From Upstream 表示没有命中 CDN。
在这里插入图片描述
整体流程
在这里插入图片描述

两种刷新方式

当 F5 刷新网页时,跳过强缓存,但是会检查协商缓存;
当 Ctrl + F5 强制刷新页面时,直接从服务器加载,跳过强缓存和协商缓存

LocalStorage
localStorage 属性允许你访问一个 Document 源(origin)的对象 Storage 用于存储当前源的数据,除非用户人为清除(调用 localStorage api 或则清除浏览器数据), 否则存储在 localStorage 的数据将被长期保留。

SessionStorage
sessionStorage 属性允许你访问一个 session Storage 对象,用于存储当前会话的数据,存储在 sessionStorage 里面的数据在页面会话结束时会被清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浏览器开发者工具是一组内置于现代Web浏览器中的工具,用于帮助开发者调试、分析和优化Web应用程序。它们提供了许多有用的功能,可以帮助开发者更好地理解和优化他们的代码。下面是一些常见的浏览器开发者工具及其功能的详解: 1. 元素面板(Elements Panel):元素面板可以显示和编辑网页的HTML结构和CSS样式。开发人员可以查看和修改DOM元素、样式规则和属性,并实时查看更改后的效果。 2. 控制台(Console):控制台是开发者与浏览器交互的地方。它可以显示网页上的JavaScript错误、警告和调试信息,并允许开发者执行JavaScript代码。 3. 网络面板(Network Panel):网络面板可以监视浏览器与服务器之间的网络请求。它提供了请求和响应的详细信息,包括请求头、响应头、请求时间和传输大小等。开发者可以使用该工具来分析和优化网络性能。 4. 性能面板(Performance Panel):性能面板可以帮助开发者分析和优化网页的性能。它提供了关于加载时间、资源使用、JavaScript执行时间等方面的详细信息,并提供了一些性能优化建议。 5. 应用程序面板(Application Panel):应用程序面板提供了关于网页的应用程序缓存、存储、索引数据库和Cookie等方面的信息。开发者可以在此处查看和编辑这些数据。 6. 安全面板(Security Panel):安全面板可以提供与网页安全相关的信息,包括证书、加密连接和混合内容等。开发者可以使用该工具来识别和修复潜在的安全风险。 除了上述功能外,浏览器开发者工具还提供了许多其他功能,例如调试JavaScript代码、模拟设备和网络条件、分析网页布局和性能等。这些工具可帮助开发者更高效地开发和调试Web应用程序,并提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值