Как я могу предотвратить кеширование Firefox - PullRequest
3 голосов
/ 24 июня 2011

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

<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 / сервлет.А приложение - это портлет для портала websphere 6.1.

Ответы [ 5 ]

1 голос
/ 25 июня 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.

См. Также:

1 голос
/ 24 июня 2011

Никогда не полагайтесь на метатеги на 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);
0 голосов
/ 24 июня 2011

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

/ MySite / CSS / menu.css? Т = 1291218768531

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

0 голосов
/ 24 июня 2011

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

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

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

0 голосов
/ 24 июня 2011

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

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
...