如何使用Play阻止浏览器缓存?

and*_*kus 9 java browser-cache http-headers playframework

我的应用程序的一部分提供了使用该redirect()方法下载的文件.我发现Chrome(而不是Firefox或IE,很奇怪)正在缓存此文件,以便即使更改了服务器端也会下载相同的版本.据我了解,有一种方法告诉浏览器不缓存文件,例如像这样的HTML,或通过添加一些东西到HTTP标头.我可能会在较低级别的Web框架中找到这些,但我不知道如何在Play!中获取标题,并且HTML选项将无法工作,因为它不是HTML文件.

似乎总是有一种聪明而简单的方法在Play中执行常见任务!那么有一种聪明而简单的方法可以防止控制器中的缓存吗?

谢谢!

编辑:

Matt将我指向http.cacheControl设置,该设置控制整个站点的缓存.虽然这可以工作,但我对缓存的大部分网站都没有问题,特别是CSS等.如果可能的话,我想一次控制一个URL的缓存(在这种情况下指向下载文件的那个).它并不会成为一个高流量的网站,所以这只是学术兴趣.

理想情况下,我想做的事情如下:

public static void downloadFile(String url) {
  response.setCaching(false);  // This is the method I'm looking for
  redirect(url);  // Send the response
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*mmi 10

Play框架response对象有一个setHeader方法.您可以像这样添加所需的标题,例如:

response.setHeader("Cache-Control", "no-cache");
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 5

我还没有测试过,但看起来http.cacheControl配置设置可能会起作用.

http.cacheControl

HTTP响应标头控制静态文件:设置默认的max-age(以秒为单位),告诉用户浏览器应该缓存页面的时间.这仅在prod模式下读取,在dev模式下禁用缓存.例如,要发送no-cache:

http.cacheControl=0
Run Code Online (Sandbox Code Playgroud)

默认值:3600- 将缓存到期时间设置为一小时.