我已经使用 Boot 实现了一个REST服务器,但是在阻止Spring设置禁用HTTP缓存的HTTP头时遇到了问题。
我的控制器如下:
@Controller
public class MyRestController {
@RequestMapping(value = "/someUrl", method = RequestMethod.GET)
public @ResponseBody ResponseEntity<String> myMethod(
HttpServletResponse httpResponse) throws SQLException {
return new ResponseEntity<String>("{}", HttpStatus.OK);
}
}
所有HTTP响应都包含以下标头:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: 0
Pragma: no-cache
我尝试了以下方法来删除或更改这些标题:
1.在控制器中调用setCacheSeconds(-1)
。
1.在控制器中调用httpResponse.setHeader("Cache-Control", "max-age=123")
。
1.定义@Bean
,它返回我调用了setCacheSeconds(-1)
的WebContentInterceptor
。
1.将属性spring.resources.cache-period
设置为-1或application.properties
中的正值。
以上都没有任何效果。我如何在Sping Boot 中禁用或更改所有或个别请求的这些标头?
9条答案
按热度按时间ztyzrc3y1#
igetnqfo2#
如果您不想对静态资源进行身份验证,可以执行以下操作:
在您的
application.properties
中:有关ResourceProperties.java可以设置的更多属性,请访问www.example.com。
qc6wkl3g3#
我在控制器中使用了下面的行。
请注意,响应的头Cache-Control值为secondWeWantTobeCached。但是,如果我们在地址栏中输入url并按Enter键,请求将始终从Chrome发送到服务器。但是,如果我们从某个链接中点击url,浏览器将不会发送新的请求,它将从缓存中取出。
huus2vyu4#
原来no-cache HTTP头是由Spring Security设置的,这在www.example.com中讨论http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#headers。
以下代码禁用HTTP响应标头
Pragma: no-cache
,但不能解决问题:我最终完全禁用了Spring Security的公共静态资源,如下所示(在上面的同一个类中):
这需要配置两个资源处理程序来正确获取缓存控制标头:
另请参见Serving static web resources in Spring Boot & Spring Security application。
wtlkbnrh5#
在spring Boot 中有很多方法可以缓存http,使用spring boot 2.1.1和spring security 5.1.1。
1.对于在代码中使用resourcehandler的资源:
您可以通过这种方式添加资源的自定义扩展。
用于添加获取资源的uri路径
用于设置资源在文件系统中的位置(给定的是相对路径,类路径,但也可以是绝对路径,文件:://)。
用于设置该高速缓存标头(无需解释)。
Resourcechain和resolver是可选的(在本例中与默认值完全相同)。
2.对于使用应用程序属性配置文件的资源
与上面相同,但不包括特定模式,但现在为config。此配置应用于列出的静态位置中的所有资源。
3.在主计长一级
这里的Response是作为参数注入到控制器方法中的HttpServletResponse。
getHeaderValue该高速缓存选项输出为字符串。例如
gpnt7bae6#
我发现这个Spring扩展:https://github.com/foo4u/spring-mvc-cache-control.
你只需要做三个步骤。
步骤1(pom.xml):
第2步(网络视图配置. java):
步骤3(控制器):
tct7dpnv7#
可以通过以下方式覆盖特定方法的默认缓存行为:
tsm1rwdh8#
让我们在测试中达到这个端点,并Assert我们已经更改了标头:
dgjrabp29#
我遇到了类似的问题。我想得到一些动态资源(图片)缓存在浏览器中。如果图片改变(不是很频繁),我改变URI的一部分...这是我的解决方案