JAVA WEB 通过response头信息设置浏览器禁止缓存

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("expires", -1);


### 如何在 Spring Boot 中设置 HTTP 响应头以控制浏览器缓存 #### 通过 `ShallowEtagHeaderFilter` 实现简单 ETag 支持 对于静态资源的缓存协商,可以通过使用 `org.springframework.web.filter.ShallowEtagHeaderFilter` 来实现简单的ETag支持。此过滤器仅适用于静态资源,并旨在节省带宽而非提升服务器性能[^1]。 ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.stereotype.Component; import org.springframework.web.filter.ShallowEtagHeaderFilter; @Component public class ShallowEtagConfig { public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() { FilterRegistrationBean<ShallowEtagHeaderFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new ShallowEtagHeaderFilter()); registration.addUrlPatterns("/static/*"); return registration; } } ``` 上述代码展示了如何注册 `ShallowEtagHeaderFilter` 并将其应用于特定路径下的请求处理上。 #### 自定义响应头配置 针对更复杂的场景或动态API接口,可通过自定义拦截器来手动设置HTTP响应头部信息: ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @Component public class CacheControlInterceptor extends HandlerInterceptorAdapter { @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (handler instanceof HandlerMethod && isApiRequest(request)) { // 判断是否为API请求 long cacheDurationInSeconds = 60 * 60; // 设置缓存时间为1小时 response.setHeader("Cache-Control", "max-age=" + cacheDurationInSeconds); response.setDateHeader("Expires", System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(cacheDurationInSeconds)); } else { super.postHandle(request, response, handler, modelAndView); } } private boolean isApiRequest(HttpServletRequest req){ String pathInfo=req.getServletPath(); return pathInfo.startsWith("/api/"); } } ``` 这段代码实现了对 `/api/` 路径下返回的数据添加相应的缓存策略,使得客户端可以根据这些指令决定何时重新验证资源以及多久内可以直接使用本地副本而无需再次发起网络请求。 另外,在某些情况下还可以考虑借助第三方库如 [HeiferBootAutoConfiguration](https://github.com/wangchujiang/heifer-boot),它提供了一些额外的功能扩展点以便更好地满足项目需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值