你有没有遇到过网页加载特别慢,或者明明更新了内容却还是看到旧页面的情况?这可能跟缓存有关。而控制缓存的关键之一,就是 Cache-Control 这个 HTTP 响应头。它告诉浏览器和中间代理服务器,这个资源该怎么缓存、能缓存多久。
常见的 Cache-Control 指令
Cache-Control 的值是一组指令,用逗号分隔。最常用的几个包括:
- max-age:资源最多可以缓存多少秒。比如
max-age=3600就是缓存1小时。 - no-cache:每次使用前都要向服务器验证资源是否更新,不能直接用本地缓存。
- no-store:禁止缓存,每次都要从服务器重新下载,适合敏感信息。
- public:响应可以被任何地方缓存(浏览器、CDN等)。
- private:只能被用户自己的浏览器缓存,不能被 CDN 或代理服务器缓存,适合用户私有数据。
实际设置方法
在服务器端设置 Cache-Control 是最常见的做法。比如你在用 Nginx,可以在配置文件里加上:
location /static/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
这段配置会让静态资源(比如图片、JS、CSS)缓存一年,并标记为可公开缓存且内容不变。
如果是 Apache 服务器,可以在 .htaccess 文件里写:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
Header set Cache-Control "public"
</IfModule>
对于开发前端的同学,有时候你想让某个 AJAX 请求不走缓存,可以直接在请求头里设置:
fetch('/api/data', {
headers: {
'Cache-Control': 'no-cache'
}
});
不过要注意,no-cache 并不是“不缓存”,而是“先验证再用”。真正完全禁止缓存得用 no-store。
还有一种常见场景:你发了个新版本网站,但用户打开还是旧的 JS 文件。这时候可以在构建时给文件名加哈希,比如 app.a1b2c3.js,然后配合 max-age=31536000 长缓存,既能提升速度,又能避免更新问题。
简单来说,Cache-Control 设置得好,能让网站更快更省流量;设得不好,轻则用户看不到更新,重则泄露隐私数据。根据资源类型合理选择缓存策略,才是关键。