【问题标题】:How do I prevent browser caching with Play?如何使用 Play 防止浏览器缓存?
【发布时间】:2011-09-25 18:11:56
【问题描述】:

我的应用程序的一部分提供了一个使用redirect() 方法下载的文件。我发现 Chrome(而不是 Firefox 或 IE,奇怪的是)正在缓存此文件,以便即使它已更改服务器端也可以下载相同的版本。我收集到有一种方法可以告诉浏览器不要缓存文件,例如like this 在 HTML 中,或者在 HTTP 标头中添加一些内容。我可能可以在较低级别的 Web 框架中解决这些问题,但我不知道如何在 Play! 中获取标题,并且 HTML 选项不起作用,因为它不是 HTML 文件。

在 Play! 中似乎总有一种聪明而简单的方法来完成常见任务,那么有没有一种聪明而简单的方法来防止控制器中的缓存?

谢谢!

编辑:

Matt 将我指向http.cacheControl setting,它控制整个站点的缓存。虽然这可行,但我对大多数网站的缓存没有问题,尤其是 CSS 等。如果可能的话,我想一次控制一个 URL 的缓存(在这种情况下指向下载文件的那个)。它不会是一个高流量的网站,所以这只是学术兴趣讨论。

理想情况下,我想做这样的事情:

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

【问题讨论】:

    标签: java http-headers playframework browser-cache


    【解决方案1】:

    播放框架response 对象有一个setHeader 方法。你可以像这样添加你想要的标题,例如:

    response.setHeader("Cache-Control", "no-cache");
    

    【讨论】:

      【解决方案2】:

      我还没有测试过,但看起来http.cacheControl configuration setting 可能会起作用。

      http.cacheControl

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

      http.cacheControl=0
      

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

      【讨论】:

      • 不错,我试试。老实说,我很少测试我的答案,所以不用担心:D。这看起来正是我所需要的!
      • 这样就设置了整个站点的缓存参数。虽然这样可行,但我想告诉浏览器不要只缓存一个特定的 URL(在这种情况下,是指向文件的那个)。我会把它添加到我的问题中。
      【解决方案3】:

      其实是这样的:

      response().setHeader("Cache-Control", "no-cache");
      

      【讨论】:

      • 在较新版本的 Play 中,play.mvc.Controller 中没有名为 response 的对象,而是 response()
      【解决方案4】:

      Tommi 的回答还可以,但要确保它在每个浏览器中都能正常工作,请使用:

      response().setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");
      

      【讨论】:

        【解决方案5】:
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, pre-check=0, post-check=0, max-age=0, s-maxage=0"); // HTTP 1.1.
        

        【讨论】:

        • edit 在您的回答中说明其工作原理以及为什么它是问题中描述的问题的解决方案。见How to Answer
        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        相关资源
        最近更新 更多