- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
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-age
和 s-maxage
集以及 0
(-1
也应该有效)。
您可能还想添加 Expires
header 设置为 0
,以防收件人不支持 Cache-Control
。来自RFC 7234 :
If a response includes a
Cache-Control
field with themax-age
directive, a recipient MUST ignore theExpires
field. Likewise, if a response includes thes-maxage
directive, a shared cache recipient MUST ignore theExpires
field. In both these cases, the value inExpires
is only intended for recipients that have not yet implemented theCache-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/
我创建了一个新的 blob,并指定 CacheControl 等于 max-age=31536000,必须重新验证(我在 Azure 门户中查看了它)。现在,当浏览器加载我的 blob 时,我会看到以
private static final CacheControl NEVER; static { NEVER = new CacheControl(); NEVER.setNoCac
我使用蒙德里安作为我的服务器 olap 引擎。 我有一个场景,其中我的一些维度数据正在发生变化。发生这种情况时,我想清除 mondrian 缓存。 我无法理解如何获得蒙德里安缓存控制的句柄。 我有引用
我在 Dropwizard 项目中有一个想要缓存的静态端点,我已向其中添加了 @CacheControl(maxAge = 6, maxAgeUnit = HOURS) 注释。但是,响应 header
我使用 python 3.6 和用于 API 使用的 requests 模块和用于缓存 API 响应的 CacheControl 模块。我正在使用以下代码,但缓存似乎不起作用: import requ
在 OSX 上运行 pip 会出现以下错误: Traceback (most recent call last): File "/usr/local/bin/pip", line 9, in
我正在尝试更改已在 S3 中的文件的 CacheControl 属性。我发现我最好的选择是将此对象复制到更改其元数据的相同路径。代码非常简单: file_key = 'index.html'
我尝试使用 javax.ws.rs.core.CacheControl 类 (JAX-RS) 设置 public 指令 例如:Cache-Control:public,max-age= 1000 但是
很抱歉,如果这看起来重复,但我一直在 interwebz 寻找一个满意的答案。 IE 8(以及 6 和 7)不允许通过基于 https 的连接下载文件。 我知道这是 MS 支持网站中建议的缓存控制问题
下面两行有什么不同? : Response.Cache.SetCacheability(HttpCacheability.NoCache); 和 Response.CacheControl = "n
我不太擅长 Java + Spring,但我想将 Cache-Control header 添加到我的 ResponseEntity。 @RequestMapping(value = "/data/{
在 Spring Boot 列表中 common application properties ,有两个缓存持续时间相关的条目听起来与我相似: spring.resources.cache.cache
我正在遵循指南并更新我的代码以在 GAE 中使用新的 Cloud Storage API,我确实需要设置 cachecontrol header ,以前这很容易: files.gs.create(fi
我正在尝试了解如何将元数据或 header (Expires、CacheControl 等)添加到使用 Laravel 5.0 存储门面上传的文件中。我已将此处的页面用作引用。 http://lara
我是一名优秀的程序员,十分优秀!