什么是强缓存和协商缓存

本文参考:什么是强缓存和协商缓存?以及他们的区别?-阿里云开发者社区

ChatGPT 仅用于自用复习

强缓存和协商缓存是浏览器缓存机制中的两种主要方式,目的是减少对服务器的请求,提高页面加载速度。它们的核心区别在于是否需要向服务器确认资源是否可以使用缓存。

1. 强缓存 (Strong Cache)

定义:

强缓存是指当浏览器请求一个资源时,如果本地缓存中有这个资源且仍然有效,则直接使用缓存,不发送请求到服务器。

实现方式:

通过 HTTP 响应头中的 Cache-Control 或 Expires 字段控制:

Cache-Control: 是 HTTP/1.1 提供的字段,用于指定缓存策略。

示例:Cache-Control: max-age=3600 表示资源在 3600 秒内有效。

cache-control除了该字段外,还有下面几个比较常用的设置值:

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

-no-store:直接禁止浏览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。

-public:可以被所有的用户缓存,包括终端用户和CDN等中间代理服务器。

-private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。

Expires: 是 HTTP/1.0 的字段,指定资源过期的具体时间(绝对时间)。

示例:Expires: Wed, 18 Jan 2025 12:00:00 GMT

特点:

如果强缓存有效,浏览器直接从缓存中读取资源。

不会向服务器发送请求。

2. 协商缓存 (Conditional Request)

定义:

协商缓存是指当浏览器请求一个资源时,先向服务器发送一个条件请求,确认本地缓存的资源是否仍然有效。如果资源未更改,服务器返回 304 Not Modified,浏览器继续使用缓存资源。

实现方式:

通过 HTTP 响应头中的 ETag 或 Last-Modified 与请求头中的 If-None-Match 或 If-Modified-Since 配合使用:

ETag: 是资源的唯一标识符,资源改变时 ETag 会更新。

浏览器请求时使用 If-None-Match 携带上次的 ETag。

Last-Modified: 表示资源最后修改的时间。

浏览器请求时使用 If-Modified-Since 携带上次的 Last-Modified 值。

ETag和Last-Modified的作用和用法,他们的区别:

1在精度上,.Etag要优于Last-Modified。Last-Modified的时间单位是秒,如果某个文件在1秒内改变了多次,那么他们的Last-Modified其实并没有体现出来修改,但是Etag每次都会改变确保了精度;

2.在性能上,Etag要逊于Last-Modified,毕竟Last-Modified只需要记录时间,而Etag需要服务器通过算法来计算出一个hash值;

3.在优先级上,服务器校验优先考虑Etag。

特点:

浏览器向服务器发送请求,附带条件字段(If-None-Match 或 If-Modified-Since)。

服务器根据条件字段判断:

如果资源未更改,返回 304 Not Modified,并且浏览器使用缓存。

如果资源已更改,返回新的资源和状态码 200 OK。

特性

强缓存

协商缓存

是否请求服务器

不会发起请求

会发起条件请求

控制字段

Cache-Control / Expires

ETag / Last-Modified

响应状态码

无请求,直接使用缓存

304 (未修改) 或 200 (已更新)

适用场景

资源未过期,直接可用

资源可能已过期,需确认是否更新

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值