【问题标题】:Explicitly disable caching for REST services显式禁用 REST 服务的缓存
【发布时间】:2016-08-24 17:49:38
【问题描述】:

我要将Cache-Control: must-revalidate,no-cache,no-store 应用于来自后端 REST 服务的所有响应。我有两个问题:

  • 这样做很常见吗?出于某种原因,我的印象是没有必要,但我没有任何来源支持这种说法(目前)。
  • 我上面说的这个值真的够了吗,还是应该设置更多?

编辑:发现这个:https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers#cache-prevention。是说当没有明确配置时浏览器可能会选择缓存,所以这意味着是的,如果我想确保缓存被禁用,应该配置它。

【问题讨论】:

标签: rest http-caching


【解决方案1】:

简短:是的,即使不存在显式控件,缓存也可能缓存响应,您需要显式禁止它。

HTTP caching specification Section 3 列出了禁止缓存响应的时间。它表明响应可能被缓存,只要响应代码是可缓存的。 HTTP specification section 6.1:

中有一个可缓存的响应代码列表

具有默认定义为可缓存的状态代码的响应 (例如,200、203、204、206、300、301、404、405、410、414 和 501 在 本规范)可以被具有启发式的缓存重用 除非方法定义另有说明,否则到期 显式缓存控制...

“启发式过期”定义为不存在显式控件时分配的过期时间。 (HTTP caching specification section 4.2.)

【讨论】:

    【解决方案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 注释的示例:

    [来源:abhirockzz.wordpress.com]

    @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();
        }
    }
    

    【讨论】:

    • 谢谢,我会阅读链接。只有一件事:“我认为”并不是一个很好的答案。
    • 没问题。相应地标记它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2019-08-29
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多