Запретить кэширование IE

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

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

  1. запись перехватчика (фильтр сервлетов) для добавления в заголовок ответа no-cache так далее.
  2. или поставить <meta> теги на каждой странице.

что я должен делать?

5 ответов


скорее установите следующие заголовки на 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">

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


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

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);

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

<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />
Марк Ноттингем!--9-->кэширование учебник это лучший ресурс, который я видел в интернете о HTTP и кэшировании, если вы хотите понять больше.

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


похоже, IE

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

немного лучшее объяснение вот!--1-->

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

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


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

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

http://msdn.microsoft.com/en-us/library/ie/ms535211 (v=против 85).aspx


изменить заголовки без кэша и т. д. Это обычный способ.