浏览器强缓存和协商缓存

强缓存是什么?

强缓存是利用 http 的返回头中的 Expires 或者 Cache-Control 两个字段来控制的,用来表示资源的缓存时间

Expires

  • 缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age+请求时间,需要和 Last modified 结合使用。但它的优先级比Cache-Control 低。
    Expires 是Web服务器响应消息的头字段,在响应的HTTP请求时告诉浏览器在过期时间前,浏览器可以直接从浏览器缓存取数据,而无需再次请求

Cache-Control

  • Cache-Control 是一个相对时间,例如 Cache-Control:3600,代表着资源的有效期是 3600秒。由于是相对时间,并且都是与客户端时间比较,所以服务器与客户端时间偏差也不会导致问题。

Cache-Control 与Expires 可以在服务端配置同时启用或者启用任意一个,同时启用的时候Cache-Control优先级高。

  • 浏览器的缓存主要是为了提高访问效率,强制缓存,第一次访问一个网站的时候,里面的静态资源如图片、CSS、JS 、icon这些资源实际上是从服务器上下载的,刷新网页这个资源是没有必要在服务器上重新去请求的,像这样的资源,浏览器会默认是一些强制缓存,强制缓存当用户第二次访问的时候,它不会再服务器上重新下载资源了,同样返回200状态码,但这个资源会从浏览器的本地缓存里面去取,这种第二次取的缓存的状态就是一种强制缓存。

协商缓存是什么?

HTTP请求的状态码为 304

  • 和后台去协商资源,要不要对它进行缓存;
  • 如果是第一次请求,返回状态码200,在响应头中返回cache-Control,用来控制缓存使用的时间 / 方式(私有缓存和共享缓存),还会返回一个唯一标识 etag(可以理解为内容资源的一个hash或者一个唯一的标识)
  • 在第二次发起请求时,先查看 max-age, 如果过期了,在请求头设置 If-None-Match 等于刚刚 Etag的值,去后台对比,如果 etag 值相同,(或者对比Last Modified的一个时间)证明后端没更新,所以返回 304状态,浏览器接收到304状态之后,判断这个资源无变化,只需从本地把缓存的资源继续使用(也是协商缓存)。
相关推荐
刃神太酷啦12 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
CDN36015 小时前
CDN 缓存命中率优化实战:解决出海业务回源过多、跨洋延迟高,缓存调优完整指南
缓存·cdn加速
咖啡星人k16 小时前
2026 上下文缓存进阶:把前缀契约写进SPEC,MonkeyCode 云端跑通
人工智能·机器学习·缓存
hweiyu0016 小时前
Redis命令:TTL
redis·缓存
MC丶科19 小时前
软考架构师90天冲刺|DAY44·Redis高级应用
数据库·数据仓库·redis·缓存·oracle·容器·规格说明书
上单带刀不带妹20 小时前
小程序图片缓存问题:时间戳和版本号解决图片不更新
缓存·小程序·vue·uniapp
她说..21 小时前
Redis项目实战整理
数据库·redis·缓存
蓝速科技1 天前
蓝速科技丨多网点涉外窗口翻译机批量部署实战指南
服务器·数据库·人工智能·缓存·语音识别
努力努力再努力wz2 天前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
小宋10212 天前
大模型成本怎么控制:Token统计、缓存与模型路由实战
人工智能·缓存