Java 是否更正CacheControl配置以指示永远不应缓存资源表示?
我想配置一个Java 是否更正CacheControl配置以指示永远不应缓存资源表示?,java,http,jax-rs,cache-control,Java,Http,Jax Rs,Cache Control,我想配置一个CacheControl指令,该指令将向所有客户机和代理指出,无论出于何种原因,资源表示都不应被缓存。这是我在阅读JavaDocs时发现的 上述配置中是否缺少任何其他设置?您的配置看起来不错,但是我经常使用max age和s-maxage设置和0(-1也应该可以工作) 如果收件人不支持缓存控制,您可能还需要将标题集添加到0。从: 如果响应包含带有max age指令的Cache Control字段,则收件人必须忽略Expires字段。同样,如果响应包含s-maxage指令,则共享缓存
CacheControl
指令,该指令将向所有客户机和代理指出,无论出于何种原因,资源表示都不应被缓存。这是我在阅读JavaDocs时发现的
上述配置中是否缺少任何其他设置?您的配置看起来不错,但是我经常使用
max age
和s-maxage
设置和0
(-1
也应该可以工作)
如果收件人不支持
缓存控制
,您可能还需要将标题集添加到0
。从:
如果响应包含带有max age
指令的Cache Control
字段,则收件人必须忽略Expires
字段。同样,如果响应包含s-maxage
指令,则共享缓存收件人必须忽略Expires
字段。在这两种情况下,Expires
中的值仅适用于尚未实现缓存控制
字段的收件人
在JAX-RS中,您可以使用过滤器将此类头添加到响应中,并使用名称绑定注释将过滤器绑定到特定的资源方法或资源类 首先定义名称绑定注释:
@NameBinding
@保留(RetentionPolicy.RUNTIME)
public@interface NoCache{}
然后创建一个过滤器,将标题添加到响应中,并使用上面定义的@NoCache
注释对其进行注释:
@NoCache
@提供者
公共类NoCacheFilter实现ContainerResponseFilter{
@凌驾
公共无效筛选器(ContainerRequestContext请求,
ContainerResponseSecontext响应){
CacheControl CacheControl=新建CacheControl();
cacheControl.setNoStore(true);
cacheControl.setNoCache(true);
cacheControl.setMustRevalidate(true);
cacheControl.setProxyRevalidate(true);
cacheControl.setMaxAge(0);
cacheControl.setSMaxAge(0);
response.getHeaders().add(HttpHeaders.CACHE_控件,cacheControl.toString());
response.getHeaders().add(HttpHeaders.EXPIRES,0);
}
}
然后使用@NoCache
将上述定义的筛选器绑定到端点:
@Path(“/foo”)
公共类MyResource(){
@得到
@诺卡奇
@产生(MediaType.APPLICATION_JSON)
公共字符串wontCache(){
...
}
}
如果需要全局筛选器,则不需要定义
@NoCache
注释。为什么要将Expires
头设置为忽略@如果收件人未实施缓存控制
,则Jarroderson将过期
设置为0
特别有用。
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);
}