什么是强制缓存?什么是协商缓存?cache

强制缓存和协商缓存是用于在Web浏览器和服务器之间进行缓存控制的两种机制。

  1. 强制缓存(强缓存,强制缓存):
    强制缓存是通过设置HTTP响应头来实现的,它告诉浏览器在一定时间内直接使用缓存的副本,而不需要再向服务器发起请求。常见的强制缓存相关的响应头有两个:
    • Expires:指定一个绝对过期时间,即缓存将在该时间之后失效。
    • Cache-Control:通过设置max-age指令来指定一个相对过期时间,即缓存将在指定的秒数之后失效。

当浏览器发送请求时,会检查强制缓存相关的响应头信息。如果缓存仍然有效,浏览器将直接从缓存中读取资源,并且不会发送请求到服务器。这样可以显著提高页面加载速度,减少对服务器的访问。

  1. 协商缓存(协商缓存,条件缓存):
    协商缓存是在强制缓存失效的情况下进行的一种机制,用于验证缓存的有效性。当浏览器发现强制缓存失效时,它会向服务器发送一个附带条件的请求,以判断缓存是否仍然有效。服务器会根据请求的条件进行验证,并返回相应的状态码来指示缓存是否有效。

协商缓存相关的请求头和响应头有以下几个常见的:

  • If-Modified-Since / Last-Modified:浏览器在请求时发送If-Modified-Since头,将上次缓存的最后修改时间发送给服务器。服务器通过比较资源的最后修改时间来判断缓存是否有效,并返回相应的状态码(如304 Not Modified)。
  • If-None-Match / ETag:浏览器在请求时发送If-None-Match头,将上次缓存的ETag值发送给服务器。服务器通过比较资源的ETag来判断缓存是否有效,并返回相应的状态码。

如果服务器返回的状态码指示缓存仍然有效,浏览器将继续使用缓存的副本。如果缓存失效,服务器将返回新的资源内容,并带有新的缓存相关的响应头,浏览器将使用新的资源并更新缓存。

综合使用强制缓存和协商缓存可以有效地减少对服务器的请求,提高页面加载速度,并减轻服务器的负载。

相关推荐
IT_陈寒1 小时前
Python装饰器把我坑惨了,原来这样用才不掉链子
前端·人工智能·后端
程序员爱钓鱼1 小时前
Rust Associated Type关联类型详解:为Trait定义内部类型
前端·后端·rust
zh_xuan2 小时前
个人主页左侧菜单支持分组,以及菜单显示和隐藏
前端·javascript·css
Emily156853598705 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
To_OC10 小时前
面试被问了三回三栏布局,这次我终于把 BFC 那层窗户纸捅破了
前端·css·面试
To_OC10 小时前
啃完 TS 工具类型我发现:Pick 和 Omit 原来就是一层窗户纸
前端·面试·typescript
风月说与山鬼12 小时前
三、大括号语法
前端·react.js
kyriewen12 小时前
我把最常踩的8个CORS跨域报错整理了一遍——第8个去年还不存在
前端·javascript
Csvn13 小时前
🕰️ 闭包 + setTimeout 的 5 个经典陷阱:为什么定时器看到的永远不是最新的值?
前端