强缓存和协商缓存的区别

强缓存和协商缓存是浏览器缓存策略的两种主要形式,它们各自有不同的特点和应用场景。以下是它们之间的主要区别:

  1. 数据来源与交互方式:

强缓存:在缓存有效期内,浏览器不会向服务器发送请求,而是直接从本地缓存中读取数据。这意味着在缓存有效期内,浏览器与服务器之间不会发生任何交互。

协商缓存:每次请求都会与服务器进行交互。浏览器会向服务器发送请求,询问资源是否有更新。服务器会根据请求中的某些标识(如ETag或Last-Modified)来判断资源是否发生了变化,并返回相应的响应。

  1. 响应状态码:

强缓存:如果命中强缓存,浏览器会直接读取本地缓存,而不会向服务器发送请求。因此,强缓存的响应状态码为200(OK)。

协商缓存:如果资源未发生变化,服务器会返回304(Not Modified)状态码,表示浏览器可以继续使用本地缓存的数据。如果资源有更新,服务器会返回新的资源数据,并可能更新相关的缓存标识。

  1. 缓存验证机制:

强缓存:主要基于Expires和Cache-Control这两个HTTP头信息来实现。通过设置这些头信息的值,可以指定缓存的有效期。在有效期内,浏览器不会向服务器发送请求。

协商缓存:主要基于ETag和Last-Modified这两个HTTP头信息来实现。ETag是一个资源的唯一标识,Last-Modified表示资源最后修改的时间。浏览器在请求时会带上这两个信息,服务器会根据这些信息来判断资源是否发生了变化。

  1. 刷新策略:

强缓存:在浏览器强制刷新(如F5刷新或Ctrl+F5强制刷新)的情况下,强缓存不会生效,浏览器会重新向服务器发送请求。

协商缓存:在浏览器强制刷新的情况下,协商缓存仍然会生效。浏览器会发送请求并带上缓存标识,服务器会根据这些标识来判断是否返回新的资源。

综上所述,强缓存和协商缓存各有其特点和适用场景。在实际应用中,通常会结合使用这两种缓存策略,以实现更好的性能和用户体验。

相关推荐
lsc_blog3 小时前
年底还在招的岗位,先确认缺口和到岗要求
git·缓存·ci/cd·职场和发展·github
xixiaoyunya4 小时前
Redis缓存三大问题实战:穿透、击穿、雪崩,我用一个电商秒杀场景讲清楚
数据库·redis·缓存
我不会起名字3228 小时前
Redis 从 0 到 1(二十三):一个热 key 打到 10 万 QPS——hotkey 与本地缓存的 Go 实现
redis·缓存·go·qps·hotkey
真上帝的左手1 天前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
bksczm1 天前
C++Redis开发(Ubuntu 22.04)
数据库·redis·缓存
goehou1 天前
缓存该删还是该改,LLM 服务里的双写问题
redis·缓存·llm·一致性·系统设计
利威尔xu2 天前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
程序猿编码2 天前
解决 LLM 算力浪费,一套统一 KV 管理层实现缓存复用
人工智能·神经网络·机器学习·缓存·llm·大模型推理