HTTP缓存机制(Cache-Control)

本文介绍了HTTP缓存机制的工作原理及其实现方式。通过客户端和服务端设置Cache-Control头字段,可以控制请求和响应的缓存行为,从而提高系统性能。文章详细解释了各种缓存指令及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


HTTP缓存机制

HTTP 协议通常应用于分布式信息系统,所谓分布式信息系统,是指以计算机网络为基础,将系统的数据与功能分别布置在不同的地方,然后再通过网络将数据与功能连接的信息系统。由于系统需要处理大量的信息,所以我们可以通过使用响应缓存的方式来提高系统性能。

在这里插入图片描述

对于客户端来说,可以将一些不经常变动的信息缓存到本地,在需要时客户端可以直接拿来使用,不必再向服务端发送请求;对于服务器来说,当客户端不能确定缓存是否有效(未过期)时,就需要再次向服务器发送请求,若缓存还可以使用,那么服务器就不必返回完整的响应,只需要返回响应行和响应头即可,减轻了服务器的压力。

客户端和服务器可以通过设置 Cache-Control 头字段来对请求和响应的缓存进行设置,HTTP 协议中为我们预先定义好了许多用来设置缓存的指令(缓存指令),使用这些指令可以覆盖客户端默认的缓存算法,而且多个缓存指令可以组合使用,只需要在每个指令之间使用逗号将其分隔开即可,例如:

Cache-Control: max-age = 60, max-stale

客户端请求中可以使用的缓存指令如下表所示:

缓存指令指令描述
no-cache不进行缓存
no-store不能在本地缓存任何有关客户端请求或服务器响应的内容
max-age = seconds设置缓存的生命周期(seconds),单位为秒,在生命周期内可以使用该缓存
max-stale [ = seconds ]告诉客户端可以使用超过缓存时间 max-age 的缓存,seconds 用来设置可以超过的时间,单位为秒,如果省略则不限制超过的时间
min-fresh = seconds要求缓存服务器返回至少还未超过指定时间(seconds)的缓存资源
no-transform不论是在请求还是响应中,都不能改变请求体或响应体的媒体类型
only-if-cached当缓存存在时,不验证缓存是否失效或过期,完全使用缓存中的内容

服务器响应中可以使用的缓存指令如下表所示:

缓存指令指令说明
public响应可以被任何缓存区缓存
private响应的消息是针对单个用户的,不能当作共享缓存处理
no-cache不进行缓存
no-store不能在本地缓存任何有关客户端请求或服务器响应的内容
no-transform不论是在请求还是响应中,都不能改变请求体或响应体的媒体类型
must-revalidate可以进行缓存,但缓存在使用之前必须先经过服务器验证缓存的有效性
proxy-revalidateproxy-revalidate 指令与 must-revalidate 指令的含义相同,不同之处在于 proxy-revalidate 指令仅适用于共享缓存
max-age = seconds设置缓存的生命周期(seconds),单位为秒,在生命周期内可以使用该缓存
s-maxage = seconds设置共享缓存的最大生命周期(seconds),单位为秒。s-maxage 指令会覆盖 max-age 指令。与之对应的私有缓存会忽略 s-maxage 指令

提示,这里的共享缓存也可以理解为是公有缓存,它里面不包含针对某个用户的数据,所以可以供所有用户使用;私有缓存则正好相反,只能针对某个用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁辰兴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值