代码之家  ›  专栏  ›  技术社区  ›  Dónal

HTTP响应缓存

  •  23
  • Dónal  · 技术社区  · 14 年前

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

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

    谢谢, 唐

    3 回复  |  直到 10 年前
        1
  •  62
  •   Community ahmed    7 年前

    不,那不是正确的方法。以下是正确的方法:

    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.
    

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

    在更改后进行测试之前,不要忘记清除浏览器缓存。

    参见:

        2
  •  3
  •   rsp    14 年前

    我们使用:

        // HTTP 1.1
        response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
        // HTTP 1.0
        response.setHeader("Pragma", "no-cache");
    
        3
  •  1
  •   alepuzio    11 年前

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

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

    例子:

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