我将Cache-Control: must-revalidate,no-cache,no-store
应用于来自后端REST服务的所有响应。我有两个问题:
编辑:发现:https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers#cache-prevention。是说浏览器可以选择在没有显式配置时缓存,所以它意味着是,如果我想确保缓存被禁用,则应该配置它。
答案 0 :(得分:3)
简短:是的,即使没有明确的控件,缓存也可以缓存响应,您需要明确禁止它。
HTTP caching specification Section 3列出禁止缓存响应的时间。它建议只要响应代码可缓存,就可以缓存响应 。可缓存的响应代码列表位于HTTP specification section 6.1:
中响应默认情况下定义为可缓存的状态代码 (例如,200,203,204,206,300,301,404,405,410,414和501 in 具有启发式的缓存可以重用此规范) 到期,除非方法定义另有说明或 显式缓存控件......
"启发式到期"定义为没有显式控件时分配的到期时间。 (HTTP caching specification section 4.2.)
答案 1 :(得分:2)
我认为它默认是禁用的。虽然有一些机制可以启用缓存以提高性能:
以下是一个很好的解释,其中包含如何启用缓存的示例:
[来源:Heroku Dev Center]
基于时间的缓存标头
在HTTP 1.1中,
Cache-Control
标头指定资源缓存行为以及可以缓存资源的最大年龄。例如,此响应将缓存一天:HTTP/1.1 200 OK Content-Type: application/json Cache-Control: private, max-age=86400 Last-Modified: Thu, 07 Feb 2013 11:56 EST
以下是所有可用
Cache-Control
令牌及其列表的列表 意思是:
private
只有客户(主要是浏览器)而没有其他人 链(如代理)应该缓存此public
链中的任何实体都可以缓存此no-cache
无论如何都不应该被缓存no-store
可以缓存,但不应存储在磁盘上(大多数浏览器会将资源保留在内存中,直到它们退出为止)no-transform
不应修改资源(例如代理缩小图片)max-age
资源有效期多长(以秒为单位)s-maxage
与max-age相同,但此值仅适用于非客户
这里有一个CDI Cache Control注释的例子:
@Path("/testcache") public class RESTfulResource { @Inject @CachControlConfig(maxAge = 20) CacheControl cc; @GET @Produces("text/plain") public Response find() { return Response.ok(UUID.randomUUID().toString()).cacheControl(cc).build(); } }