从这个question可以看出Spring安全管理弹出启动的缓存。从spring boot documentation开始,它显示了如何使用以下命令设置资源缓存:
spring.resources.cache-period= # cache timeouts in headers sent to browser
cache-period
非常适合春季启动的所有预定义静态位置(即/css**
,/js/**
,/images/**
),但我也生成{ {1}}用于离线下载我的静态资产,并且由于上述所有spring security / boot都发送了带有manifest.appcache的缓存头
manifest.appcache
我想知道如何为"method": "GET",
"path": "/manifest.appcache",
"response": {
"X-Application-Context": "application:local,flyway,oracle,kerberos:8080",
"Expires": "Tue, 06 Oct 2015 16:59:39 GMT",
"Cache-Control": "max-age=31556926, must-revalidate",
"status": "304"
}
添加排除项。 IE和Chrome似乎做了正确的事情'使用appcache而不管我的标题,但是当注意到appcache发生了变化并且我认为我的缓存标题搞砸了时,FF似乎更加特别。
编辑: 我应该从WebMvcAutoConfiguration的源代码中添加它,它显示了如何为资源设置缓存,我只是不确定如何选择性地禁用我的1个案例,而不会破坏Spring引导集的其余部分在这个文件中。
manifest.appcache
答案 0 :(得分:3)
基于this answer详细说明IE需要" max-age = 1,必须重新验证",并通过在所有浏览器上进行测试,设置属性值
spring.resources.cache-period=1
将允许写入正确的http标头,以便正确处理appcache清单。它不是我希望的解决方案(能够使用正确的标头来设置缓存周期为0),但它确实使浏览器正常运行并正确使用appcache清单。
再次总结一下解决方案的背景 - 这是我的应用程序离线下载所有资产(js / css / html)并从appcache提供服务。
答案 1 :(得分:2)
感谢Q和A!
我们遇到了类似的问题:所有浏览器(Chrome,Safari,IE)只有一个(FF)没有自己缓存清单文件,但在更改后重新加载。
但是,在Spring Boot中设置缓存周期设置并不能完全解决问题。另外,我不想为Spring Boot应用程序提供的所有文件设置缓存控制参数,而只是禁用清单的缓存。
我的解决方案由两部分组成:
在清单文件中提供“rev”注释。虽然W3C spec没有涵盖,但某些浏览器似乎想要这样的注释来检测清单或引用(缓存)文件中的更改:
https
我们现在通过Maven生成的唯一内部版本号更改缓存清单文件中的“rev”参数:https://github.com/dukecon/dukecon_html5/commit/b60298f0b856a7e54c97620f278982142e3e1f45)。
答案 2 :(得分:2)
在当前版本(2016年2月)中,无需在代码中执行某些操作来更改默认行为。 只需在application.properties中进行一些配置:
# Enable HTML5 application cache manifest rewriting.
spring.resources.chain.html-application-cache=true
# Enable the Spring Resource Handling chain. Disabled by default unless at least one strategy has been enabled.
spring.resources.chain.enabled=true
# Enable the content Version Strategy.
spring.resources.chain.strategy.content.enabled=true
# Comma-separated list of patterns to apply to the Version Strategy.
spring.resources.chain.strategy.content.paths=/**
# Locations of static resources.
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
这就是全部。现在,Spring将检查您的静态文件是否已更改,并且可以发送更智能的响应(If-Modiffied-Since和其他)并重写您的appcache。
此外,如果有理由不对某些资源使用基于内容的版本 - 您可以使用备用FixedVersion策略并在配置中明确设置版本:
#Enable the fixed Version Strategy.
spring.resources.chain.strategy.fixed.enabled=false
# Comma-separated list of patterns to apply to the Version Strategy.
spring.resources.chain.strategy.fixed.paths=
# Version string to use for the Version Strategy.
spring.resources.chain.strategy.fixed.version=
P.S。不要忘记Spring Security:它会重写缓存标头并禁用缓存。
在docs
中查看详情