什么是强缓存和协商缓存

强缓存利用Cache-Control或Expires字段避免服务器请求,直接使用本地资源。协商缓存通过Etag和Last-Modified与服务器交互确认资源是否更新。这两种机制结合使用,优化网页加载速度并减少服务器压力。
摘要由CSDN通过智能技术生成

强缓存

强缓存是利用浏览器本地缓存直接返回资源,而不发送请求到服务器。当浏览器首次请求资源时,服务器会在响应头中添加 Cache-Control 或 Expires 字段来指定资源的过期时间。在下次请求该资源时,浏览器会先检查本地缓存,并比较该缓存是否过期。如果未过期,则直接使用本地缓存,不发送请求到服务器。

常见的响应头指令:

  • Cache-Control: max-age=<seconds>:指定资源在发送请求后的一段时间内有效,单位为秒。
  • Expires: <date/time>:指定资源的到期时间,如果在到期时间之前发送请求,将直接使用本地缓存。

强缓存可以有效减少网络请求,提高页面加载速度和用户体验。但如果资源更新了,浏览器无法立即获取最新的版本,可能需要等待缓存过期或清除缓存后才能获取更新的资源。

Cache-Control可设置的字段

public:设置了该字段值的资源表示可以被任何对象(包括:发送请求的客户端、代理服务器等等)缓存。这个字段值不常用,一般还是使用max-age=来精确控制;
private:设置了该字段值的资源只能被用户浏览器缓存,不允许任何代理服务器缓存。在实际开发当中,对于一些含有用户信息的HTML,通常都要设置这个字段值,避免代理服务器(CDN)缓存;
no-cache:设置了该字段需要先和服务端确认返回的资源是否发生了变化,如果资源未发生变化,则直接使用缓存好的资源(走协商缓存);
no-store:设置了该字段表示禁止任何缓存,每次都会向服务端发起新的请求,拉取最新的资源;
max-age=:设置缓存的最大有效期,单位为秒;
s-maxage=:优先级高于max-age=,仅适用于共享缓存(CDN),优先级高于max-age或者Expires头;
max-stale[=]:设置了该字段表明客户端愿意接收已经过期的资源,但是不能超过给定的时间限制。

一般来说只需要设置其中一种方式就可以实现强缓存策略,当两种方式一起使用时,Cache-Control 的优先级要高于 Expires

  • no-cache 是指先要和服务器确认是否有资源更新,在进行判断。也就是说没有强缓存,但是会有协商缓存;
  • no-store 是指不使用任何缓存,每次请求都直接从服务器获取资源。

协商缓存

协商缓存是通过与服务器进行协商来决定是否使用缓存。当浏览器发起请求时,服务器会返回响应头中的 Etag 或 Last-Modified 字段来标识资源的版本信息。在下次请求该资源时,浏览器会将这些信息发送回服务器,与服务器进行协商。

常见的响应头指令:

  • Etag:资源的唯一标识符,由服务器生成,用于比较资源是否有变化。
  • Last-Modified:资源的最后修改时间。

在协商缓存中,如果资源未发生变化,则服务器返回 304 Not Modified 状态码,告诉浏览器可以使用本地缓存,节省带宽和服务器资源。否则,服务器返回新的资源内容和状态码,浏览器更新缓存,并重新存储资源的新的 Etag 或 Last-Modified 值。

协商缓存更加灵活,可以在资源更新时及时获取最新版本,避免了强缓存的缺点。然而,协商缓存的处理需要进行额外的服务器请求,会增加一些开销。

当 Last-Modified 和 Etag 属性同时出现的时候,Etag 的优先级更高。使用协商缓存的时候,服务器需要考虑负载平衡的问题,因此多个服务器上资源的 Last-Modified 应该保持一致,因为每个服务器上 Etag 的值都不一样,因此在考虑负载平衡时,最好不要设置 Etag 属性。

在实际的缓存机制中,强缓存策略和协商缓存策略是一起合作使用的。浏览器首先会根据请求的信息判断,强缓存是否命中,如果命中则直接使用资源。如果不命中则根据头信息向服务器发起请求,使用协商缓存,如果协商缓存命中的话,则服务器不返回资源,浏览器直接使用本地资源的副本,如果协商缓存不命中,则浏览器返回最新的资源给浏览器。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值