ExpiresActive 是 Apache HTTP Server mod_expires 模块的指令,用于启用或禁用静态资源缓存头(Expires/Cache-Control)的自动设置,需配合 ExpiresByType 或 ExpiresDefault 使用,与 Java 应用逻辑无关但常用于 Java Web 应用的前置 Apache 环境。

ExpiresActive 不是 Java 或 Apache 的 Java 组件中的指令,而是 Apache HTTP Server(即 httpd)的 mod_expires 模块提供的配置指令,用于控制静态资源(如 CSS、JS、图片等)在客户端浏览器中的缓存有效期。它本身与 Java 应用逻辑无关,但常被部署 Java Web 应用(如 Spring Boot、Tomcat 前置 Apache)的服务器环境所使用。
ExpiresActive 的作用和基本用法
该指令启用或禁用 mod_expires 模块对响应头 Expires 和 Cache-Control 的自动设置功能:
-
ExpiresActive On:开启过期时间计算,后续ExpiresByType或ExpiresDefault才会生效 -
ExpiresActive Off:关闭所有自动过期头注入,即使写了其他 Expires 指令也不起作用
注意:仅开启 ExpiresActive 并不能单独设定缓存时间,必须配合 ExpiresByType(按 MIME 类型)或 ExpiresDefault(全局默认)使用。
如何为常见静态资源设置有效期
典型配置示例(写在 .htaccess 或虚拟主机配置中):
立即学习“Java免费学习笔记(深入)”;
ExpiresActive On ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresDefault "access plus 2 days"
其中 "access plus X" 表示从用户首次访问该资源的时间点开始计算有效期;也可用 "modification plus X"(基于文件最后修改时间),适合内容稳定、更新不频繁的资源。
与 Java Web 应用协同使用的注意事项
当 Apache 作为反向代理前置 Tomcat 或 Spring Boot 时:
- Apache 的
ExpiresActive只影响它自己直接提供服务的静态资源(如放在 DocumentRoot 下的 assets) - 若静态资源由 Java 应用动态生成(如通过 Controller 返回 JS/CSS),则 Apache 不会处理其响应头,需在 Java 代码或框架中手动设置
Cache-Control(如 Spring 的@CacheControl注解或ResponseEntity设置头) - 确保 Apache 配置文件中已加载
mod_expires:LoadModule expires_module modules/mod_expires.so - 若使用
ProxyPass将请求转发给后端 Java 服务,Apache 默认不会重写或添加 Expires 头,除非显式配置Header set或启用mod_headers
替代方案与现代实践建议
虽然 ExpiresActive 仍可用,但 HTTP/1.1 推荐优先使用 Cache-Control(更灵活、支持 max-age、immutable 等语义):
-
Header set Cache-Control "public, max-age=2592000, immutable"(需启用mod_headers) - 对于版本化资源(如
app.a1b2c3.js),可设较长max-age,避免频繁校验 - Java 应用内可通过过滤器统一添加缓存头,比 Apache 配置更可控、更易随业务逻辑变化
不复杂但容易忽略:确认 Apache 是否真正应用了配置(重启服务或重载)、检查响应头是否实际出现(用浏览器 DevTools 的 Network 面板验证),而非仅依赖配置语法正确。










