在 HTTP 协议中,缓存并不是由某一个字段单独决定的,而是由多个缓存相关头字段共同作用的结果。理解这些字段的优先级和生效规则,对于接口设计和性能控制非常重要。
下面对常见的 HTTP 缓存控制字段及其作用机制进行说明。
Cache-Control 是 HTTP/1.1 中用于控制缓存行为的主要字段,常见取值包括:
no-cache
no-store
max-age
public
private
示例:
Cache-Control: max-age=3600表示资源在 3600 秒内被认为是新鲜的,可直接使用缓存。
这两个指令经常被混淆,但含义并不相同。
Cache-Control: no-cache含义:
也就是说,缓存并未被禁止,只是不能直接使用。
Cache-Control: no-store含义:
通常用于包含敏感信息的响应。
在 HTTP/1.1 中,max-age 的优先级高于 Expires。
Cache-Control: max-age=600
Expires: Wed, 01 Jan 2025 00:00:00 GMT在同时存在时:
max-age
Expires 主要用于兼容旧客户端
Cache-Control: public表示:
Cache-Control: private表示:
常用于与用户状态相关的响应。
除了时间控制,HTTP 还提供了基于内容的缓存验证机制。
服务器返回:
ETag: "abc123"客户端下次请求时携带:
If-None-Match: "abc123"如果资源未发生变化,服务器返回:
HTTP/1.1 304 Not Modified此时客户端继续使用本地缓存。
这是另一种基于时间戳的缓存验证方式。
Last-Modified: Tue, 10 Sep 2024 08:00:00 GMT客户端请求时:
If-Modified-Since: Tue, 10 Sep 2024 08:00:00 GMT如果资源未更新,同样返回 304。
在常见实现中,缓存相关字段的判断顺序可以简化为:
no-store
max-age
理解这一顺序,有助于判断缓存是否符合预期。
HTTP 缓存并非“开或关”的简单选择,而是由多个字段组合决定:
Cache-Control 决定基本策略
ETag 与 Last-Modified 决定验证方式
public / private 决定缓存范围
合理配置这些字段,可以在保证数据一致性的前提下,减少不必要的请求。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。