как я могу предотвратить кеширование firefox

я пробовал много возможных решений, но я не могу решить проблему:

<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache-control" content="no-store">
<meta http-equiv="Cache-control" content="must-revalidate">
<meta http-equiv="pragma" content="no-cache"> 
<meta name="expires" content="0">

они не работают. Кто-нибудь может помочь? Я использую jsp/сервлет. А приложение представляет собой портлет для веб-портала 6.1.


person rdn    schedule 24.06.2011    source источник
comment
Я считаю, что вы должны ответить на ответ BalusC ниже. Работает за ресурсы. Единственным фактором, помимо этого влияющим на портлеты, являются параметры кэша для конкретных портлетов, которые вы устанавливаете с помощью административных интерфейсов.   -  person user918176    schedule 18.09.2011


Ответы (5)


Никогда не полагайтесь на метатеги на HTML-странице для управления кэшированием. Вместо этого вам нужно установить заголовки HTTP в своем ответе. В вашем контроллере, прежде чем отображать какие-либо выходные данные, вы должны установить следующее:

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

Это работало для меня в прошлом, но вы также можете попробовать следующее, если это не поможет.

response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 1);
person Brad    schedule 24.06.2011

Мета-заголовки используются только тогда, когда страница запрашивается из файловой системы локального диска, а не через HTTP. Вместо этого вам нужно установить настоящие заголовки ответа HTTP.

Создайте фильтр, который в основном выполняет следующую работу:

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse hsr = (HttpServletResponse) res;
    hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    hsr.setDateHeader("Expires", 0); // Proxies.
    chain.doFilter(req, res);
}

Сопоставьте его с шаблоном URL, например, *.jsp, чтобы он работал на всех страницах JSP.

Вы были правы с заголовками Cache-Control в исходном вопросе, обязательно иметь no-store и must-revalidate вместе с no-cache. Почти все остальные ответы, опубликованные до сих пор, в основном ориентированы на MSIE.

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

person BalusC    schedule 24.06.2011

Попробуйте установить их в заголовке ответа в вашем сервлете, например,

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
person Dilini Rajapaksha    schedule 24.06.2011

Firefox 3 известен своими проблемами с кешем

https://bugzilla.mozilla.org/buglist.cgi?quicksearch=Cache-control

Однажды я реализовал решение, в котором каждая страница будет получать случайный идентификатор, добавленный к ее имени, поэтому Firefox думает, что это другая страница. Не много знаю о портлетах, но пробовали ли вы это?

person Jeroen Baert    schedule 24.06.2011

у нас были похожие проблемы с Liferay Portal Server. Наше решение состояло в том, чтобы добавить метку времени к ссылке ресурсов (css/js), что-то вроде

/mysite/css/menu.css?t=1291218768531

Мы контролируем, когда обновляем отметку времени из нашего приложения, поэтому у нас есть контроль, когда мы заставляем браузер перезагружать ресурс.

person Sylar    schedule 24.06.2011
comment
мне нужно перезагрузить элемент формы. Я добавил динамический параметр в actionurl формы, но это не сработало. Затем я конвертирую метод формы, чтобы получить его из сообщения. После отправки я меняю параметры из URL-адреса, затем ввожу, но все равно приходит тот же контент! Есть ли у вас какие-либо идеи? - person rdn; 24.06.2011