Предотвратить IE кеширование - PullRequest
17 голосов
/ 17 мая 2010

Я занимаюсь разработкой веб-приложения Java EE с использованием Struts. Проблема с кэшированием в Internet Explorer. Если пользователь выходит из системы, он может получить доступ к некоторым страницам, потому что они кэшируются, и никакой запрос не выполняется. Если я нажму "Обновить", то все будет нормально. Кроме того, если пользователь снова заходит на страницу входа, он не будет перенаправлять его, поскольку эта страница также кэшируется.

На ум приходят два решения:

  1. Запись перехватчика (типа сервлетного фильтра) для добавления к заголовку ответа без кэширования и т. Д.
  2. Или или поставить <meta> теги на каждой странице.

Что мне делать?

Ответы [ 5 ]

29 голосов
/ 17 мая 2010

Вместо этого установите следующие заголовки на HttpServletResponse рассматриваемых страниц, чтобы вам не приходилось копировать их вручную на все страницы:

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.

Это эквивалентно установке следующих мета-заголовков на страницах вручную:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

Также см. этот ответ . Не забудьте очистить кеш браузера перед тестированием;)

5 голосов
/ 17 мая 2010

Я нашел следующее, чтобы хорошо работать:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

По тэгам по этому вопросу похоже, что вы используете Struts. Struts 1.x позволяет вам сделать это через конфигурацию в struts-config.xml, установив nocache="true" для элемента controller:

<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />

Учебник Марка Ноттингема по кэшированию - лучший ресурс, который я видел в Интернете о HTTP и кэшировании, если вы хотите узнать больше.

Это, как говорится, в зависимости от проблемы, которую вы видите, это может быть проблема истории браузера. Смотрите здесь для получения дополнительной информации об этом.

2 голосов
/ 30 января 2012

Похоже, что IE <9 все еще будет кешировать, даже если у вас есть прагма: no-cache в голове и браузер обновляется при каждой загрузке страницы.Вам нужно снова добавить метатеги во второй заголовок перед закрытием html.Это прямо от самой MS. </p>

http://support.microsoft.com/kb/222064/

чуть лучшее объяснение здесь

http://www.htmlgoodies.com/beyond/reference/article.php/3472881/So-You-Dont-Want-To-Cache-Huh.htm

Из тестирования вам также нужны Expires: -1 метатег, чтобы он работал.Рекомендуется использовать Expires: -1, а не 0.

0 голосов
/ 21 октября 2013

Добавление тега type = "button" в кнопку фактического действия.

Значение по умолчанию атрибута type зависит от текущего режима совместимости документов. Значением по умолчанию является submit. В других режимах совместимости значением по умолчанию является кнопка. Когда элемент BUTTON представляется в форме, значение зависит от текущего режима совместимости документов. Windows Internet Explorer 8 и более поздние версии. Значение по умолчанию атрибута type зависит от текущего режима совместимости документов. В режиме стандартов IE8 значением по умолчанию является submit. В других режимах совместимости и более ранних версиях Windows Internet Explorer значением по умолчанию является кнопка. Internet Explorer 8 и более поздние версии. Когда элемент BUTTON представляется в форме, значение зависит от текущего режима совместимости документов. В режиме IE8 атрибут value отправляется. В других режимах документа и более ранних версиях Internet Explorer передается значение innerText.

http://msdn.microsoft.com/en-us/library/ie/ms535211(v=vs.85).aspx

0 голосов
/ 17 мая 2010

Изменение заголовков без кэширования и т. Д. Это обычный способ.

...