Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否更正CacheControl配置以指示永远不应缓存资源表示?_Java_Http_Jax Rs_Cache Control - Fatal编程技术网

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