Dónal
Dónal

Reputation: 187529

HTTP response caching

I want to ensure that my servet's response is never cached by the broswer, such that even if two identical requests are made (a nanosecond apart), the server is always contacted. Is this the correct way to achieve this:

class MyServlet extends HttpServlet {

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

Thanks, Don

Upvotes: 23

Views: 46939

Answers (3)

Kurt Du Bois
Kurt Du Bois

Reputation: 7655

According to microsoft, these headers are required for IE:

  • Cache-Control;
  • Pragma;
  • Expires (that should be negative);

Example:

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

Upvotes: 1

BalusC
BalusC

Reputation: 1108712

No, that's not the correct way. Here is the correct way:

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.

You'll probably see someone else suggesting other entries/attributes, but those are completely irrelevant when at least the above are mentioned.

Don't forget to clear your browser cache before testing after the change.

See also:

Upvotes: 64

rsp
rsp

Reputation: 23373

We use:

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

Upvotes: 3

Related Questions