HTTP-кеширование ответов - PullRequest
       16

HTTP-кеширование ответов

23 голосов
/ 05 августа 2010

Я хочу убедиться, что ответ моего сервера не будет кэшироваться посредником, так что даже если выполняются два идентичных запроса (с интервалом в наносекунду), сервер всегда связывается. Это правильный способ достижения этого:

class MyServlet extends HttpServlet {

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

Спасибо, Дон

Ответы [ 3 ]

62 голосов
/ 05 августа 2010

Нет, это не правильный путь. Вот правильный путь:

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.

Вы, вероятно, увидите, что кто-то еще предлагает другие записи / атрибуты, но они совершенно не имеют значения, когда упоминается, по крайней мере, выше.

Не забудьте очистить кеш браузера перед тестированием после изменения.

Смотри также:

3 голосов
/ 05 августа 2010

Мы используем:

    // HTTP 1.1
    response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
    // HTTP 1.0
    response.setHeader("Pragma", "no-cache");
1 голос
/ 05 августа 2010

По словам Microsoft, для IE необходимы следующие заголовки:

  • Cache-Control ;
  • Pragma ;
  • Истекает (должно быть отрицательным);

Пример:

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