http协议中缓存Cache-Control详解

Cache-Control 是一个 HTTP/1.1 协议中的头部字段,用于指定请求和响应遵循的缓存机制。通过这个头部,服务器可以告诉客户端响应可以被缓存多长时间,以及在什么条件下可以被缓存和重新使用。以下是一些常见的 Cache-Control 指令:

基本指令

  • no-cache

    表示响应不应该被缓存,除非得到客户端的确认。这确保了客户端总是通过服务器验证缓存的有效性。使用 no-cache 指令表示客户端可以缓存内容,但在使用之前必须向原始服务器验证缓存的有效性。这意味着每次客户端需要使用缓存时,它都会发送一个请求到服务器,以确认缓存是否仍然是最新的。服务器可以通过返回304状态码(Not Modified)来回应,告诉客户端缓存版本仍然是最新的,客户端可以使用缓存数据。如果资源已经被修改,服务器会发送新的响应数据。no-cache 适用于需要确保用户总是获取到最新数据的场景,但同时又希望建立缓存以优化性能。

  • no-store

    表示响应不应该在任何情况下被缓存,这适用于敏感信息,确保信息不会在本地存储。 与no-cache相比no-store 指令更加严格,它告诉客户端和任何中间缓存(如代理服务器)不应该存储任何版本的响应。也就是说,无论请求条件如何,每次用户请求时都需要从服务器获取完全的新响应数据。no-store 通常用于非常敏感的数据,如个人隐私信息或者银行交易页面,这些页面不应该被存储在任何地方以避免安全风险。

  • public

    表示响应可以被任何缓存(即使是通常是私有的,如浏览器缓存)缓存。

  • private

    指的是响应是私有的,例如,它只适用于单个用户,只能被用户的浏览器缓存。

  • max-age=秒

    指定一个时间段,在这段时间内,响应被认为是新鲜的。此时间从响应生成开始计算。

可选指令

  • s-maxage=秒

    类似于 max-age,但这是专门为共享缓存(如 CDN)设置的。

  • must-revalidate

    当缓存过期时,缓存必须向服务器验证缓存响应的有效性,即使用户操作是离线的。

  • proxy-revalidate

    must-revalidate 类似,但它只适用于共享缓存。

  • immutable

    表示响应体不会随时间而改变,缓存可以无限期地复用它,不需要进行重新验证。

  • no-transform

    不允许缓存修改资源内容,比如不允许压缩图片。

过期指令

  • stale-while-revalidate=秒

    表示客户端愿意接受超出最大新鲜期的响应,在后台静默地更新缓存内容。

  • stale-if-error=秒

    如果服务器发生错误,客户端愿意接受一个过时的响应。

示例

一个响应头可能包含如下的 Cache-Control 指令:

javascript 复制代码
Cache-Control: public, max-age=3600

这意味着此响应可以被任何缓存缓存,并且是新鲜的,在接下来的3600秒(1小时)内。

一个请求头可能包含如下的 Cache-Control 指令:

javascript 复制代码
Cache-Control: no-cache

这意味着客户端要求接收到的每个响应都必须直接来自服务器,或者至少在返回给客户端之前得到服务器的验证。

相关推荐
weixin_4569042732 分钟前
使用HTTPS 服务在浏览器端使用摄像头的方式解析
网络协议·http·https
森林-2 小时前
MyBatis 从入门到精通(第三篇)—— 动态 SQL、关联查询与查询缓存
sql·缓存·mybatis
虫小宝3 小时前
返利软件的分布式缓存架构:Redis集群在高并发场景下的优化策略
分布式·缓存·架构
lifallen3 小时前
字节跳动Redis变种Abase:无主多写架构如何解决高可用难题
数据结构·redis·分布式·算法·缓存
疯狂的维修4 小时前
关于Gateway configration studio软件配置网关
网络协议·c#·自动化·gateway
wow_DG4 小时前
【WebSocket✨】入门之旅(五):WebSocket 的安全性
网络·websocket·网络协议
C++_girl4 小时前
缓存未命中
c++·缓存
虫小宝4 小时前
返利app排行榜的缓存更新策略:基于过期时间与主动更新的混合方案
java·spring·缓存
Light604 小时前
领码SPARK融合平台 · TS × Java 双向契约 —— 性能与治理篇|缓存分段与版本秩序
低代码·缓存·spark
Java烘焙师6 小时前
架构师必备:缓存更新模式总结
mysql·缓存