apache可通过mod_expires和mod_headers模块配置expires与cache-control响应头,对js、css、图片等静态资源启用长期缓存,同时排除html、登录接口等动态敏感内容,并通过开发者工具或curl验证缓存效果。

Apache可以通过配置HTTP缓存响应头(如 Expires、Cache-Control),让浏览器对静态资源(JS、CSS、图片等)进行本地缓存,从而显著降低重复请求带来的服务器带宽消耗和响应压力。
启用mod_expires模块并配置过期时间
确保 Apache 已加载 mod_expires 模块(通常在 httpd.conf 或 apache2.conf 中取消注释):
LoadModule expires_module modules/mod_expires.so
然后在虚拟主机或目录配置中添加缓存规则,例如:
<ifmodule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
</ifmodule>
这样浏览器会根据 MIME 类型为不同资源设置对应的缓存有效期,避免频繁向服务器发起条件请求。
配合使用Cache-Control增强控制力
Cache-Control 比 Expires 更灵活,支持更多指令(如 public、max-age、immutable)。推荐与 mod_expires 结合使用:
<ifmodule mod_headers.c><filesmatch>
Header set Cache-Control "public, max-age=31536000, immutable"
</filesmatch></ifmodule>
注意:immutable 可防止浏览器在用户刷新时发送 If-None-Match 或 If-Modified-Since 请求,进一步节省带宽(适用于带哈希指纹的文件名,如 app.a1b2c3.js)。
排除动态内容和敏感资源
不要对以下内容启用长期缓存:
- HTML 页面(尤其是未使用版本号或 ETag 的)——建议设为
no-cache或短时效 - 登录态相关接口(如
/api/user)——应禁用缓存:Cache-Control: no-store - 含用户个性化数据的响应 —— 使用
private并限制max-age
可在 Location 或 FilesMatch 中单独处理:
<location>
Header set Cache-Control "no-store, no-cache, must-revalidate"
</location>
验证缓存是否生效
部署后通过浏览器开发者工具(Network 标签页)检查响应头:
- 查看
Cache-Control和Expires字段是否符合预期 - 刷新页面时,静态资源状态码应为
200 (from disk cache)或304 Not Modified - 使用
curl -I http://yoursite.com/style.css快速确认响应头
若资源更新后用户仍看到旧版,请确保文件名变更(如加哈希)或清除 CDN/代理缓存。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










