gpt4 book ai didi

java - 更正 CacheControl 配置以指示不应缓存资源表示?

转载 作者:可可西里 更新时间:2023-11-01 17:05:21 27 4
gpt4 key购买 nike

private static final CacheControl NEVER;

static
{
NEVER = new CacheControl();
NEVER.setNoCache(true);
NEVER.setMaxAge(-1);
NEVER.setMustRevalidate(true);
NEVER.setNoStore(true);
NEVER.setProxyRevalidate(true);
NEVER.setSMaxAge(-1);
}

我想配置一个 CacheControl 指令,该指令将向所有客户端和代理指示资源表示应该 NEVER 出于任何原因被缓存。这是我从 my research 中找到的并阅读 JavaDocs。

上述配置中是否还缺少其他设置?

最佳答案

您的配置看起来不错,但是我经常在 Cache-Control 中使用 max-ages-maxage 集以及 0 (-1 也应该有效)。


您可能还想添加 Expires header 设置为 0,以防收件人不支持 Cache-Control。来自RFC 7234 :

If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field. Likewise, if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field. In both these cases, the value in Expires is only intended for recipients that have not yet implemented the Cache-Control field.


在 JAX-RS 中,您可以使用过滤器将此类 header 添加到响应中,并使用名称绑定(bind)注释将过滤器绑定(bind)到特定的资源方法或资源类。

首先定义名称绑定(bind)注解:

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface NoCache {}

然后创建一个过滤器以将 header 添加到响应中,并使用上面定义的 @NoCache 注释对其进行注释:

@NoCache
@Provider
public class NoCacheFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext request,
ContainerResponseContext response) {

CacheControl cacheControl = new CacheControl();
cacheControl.setNoStore(true);
cacheControl.setNoCache(true);
cacheControl.setMustRevalidate(true);
cacheControl.setProxyRevalidate(true);
cacheControl.setMaxAge(0);
cacheControl.setSMaxAge(0);

response.getHeaders().add(HttpHeaders.CACHE_CONTROL, cacheControl.toString());
response.getHeaders().add(HttpHeaders.EXPIRES, 0);
}
}

然后使用 @NoCache 将上面定义的过滤器绑定(bind)到您的端点:

@Path("/foo")
public class MyResource() {

@GET
@NoCache
@Produces(MediaType.APPLICATION_JSON)
public String wontCache() {
...
}
}

如果你想要一个全局过滤器,你不需要定义@NoCache注解。

关于java - 更正 CacheControl 配置以指示不应缓存资源表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com