как мога да предотвратя кеширането на 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/servlet. А приложението е портлет за уебсферен портал 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