【问题标题】:HTTP response cachingHTTP 响应缓存
【发布时间】:2011-03-25 16:34:51
【问题描述】:

我想确保我的 servert 的响应永远不会被浏览器缓存,这样即使发出了两个相同的请求(相隔一纳秒),也始终会联系服务器。这是实现此目的的正确方法吗:

class MyServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        response.setHeader("Cache-Control", "no-cache");
    }
}

谢谢, 唐

【问题讨论】:

    标签: java http servlets caching


    【解决方案1】:

    不,这不是正确的方法。这是正确的方法:

    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setDateHeader("Expires", 0); // Proxies.
    

    您可能会看到其他人建议其他条目/属性,但至少在提到上述内容时,这些是完全无关的。

    更改后的测试前不要忘记清除浏览器缓存。

    另见:

    【讨论】:

    • 除了之前说的,我建议不要在servlet中,而是在filter中,放在其他filter/servlet之前,这样你就可以在整个应用程序中添加no-caching,而不需要在每个 servlet 中添加或调用此“response.set..”。
    【解决方案2】:

    我们使用:

        // HTTP 1.1
        response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
        // HTTP 1.0
        response.setHeader("Pragma", "no-cache");
    

    【讨论】:

      【解决方案3】:

      根据微软的说法,IE 需要这些头文件:

      • 缓存控制;
      • 语用;
      • 过期(应该是负数);

      例子:

      Pragma: no-cache
      Cache-Control: no-cache
      Expires: -1
      

      【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2011-04-21
      • 2020-03-25
      • 1970-01-01
      • 2022-01-18
      • 2012-08-01
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多