强缓存默认时间
HTTP 强缓存在未设置过期时间时的默认行为
问题
当服务器没有设置 Cache-Control 或 Expires 时,浏览器的默认强缓存时间是多少?
解答
没有固定的默认值。浏览器会使用**启发式缓存(Heuristic Caching)**来计算缓存时间。
计算公式
缓存时间 = (Date - Last-Modified) × 10%
即:资源最后修改时间距今越久,缓存时间越长。
示例
HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 00:00:00 GMT
Last-Modified: Mon, 01 Jan 2023 00:00:00 GMT
Content-Type: text/html
// 计算启发式缓存时间
const date = new Date('2024-01-01').getTime();
const lastModified = new Date('2023-01-01').getTime();
// 资源"年龄":365 天
const age = date - lastModified;
// 缓存时间:365 × 10% = 36.5 天
const cacheTime = age * 0.1;
console.log(cacheTime / (1000 * 60 * 60 * 24)); // 36.5 天
显式设置缓存时间
# 推荐:明确设置缓存策略
Cache-Control: max-age=31536000
# 或设置过期时间
Expires: Wed, 01 Jan 2025 00:00:00 GMT
关键点
- 无
Cache-Control和Expires时,浏览器使用启发式缓存 - 计算公式:
(Date - Last-Modified) × 10% - 必须有
Last-Modified头才能计算,否则可能不缓存 - 不同浏览器实现可能略有差异(10% 是 RFC 建议值)
- 生产环境应显式设置
Cache-Control,避免依赖默认行为
目录