Подтвердить что ты не робот

Предотвращение кэширования IE

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

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

  • Написание перехватчика (например, фильтр сервлетов) для добавления в заголовок ответа без кеша и т.д.
  • Или или поместите теги <meta> на каждую страницу.

Какой я должен делать?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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 и кешированию, если вы стремятся понять больше.

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

Ответ 3

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

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.

Ответ 4

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

Значение по умолчанию атрибута type зависит от текущего режима совместимости документов. Значение по умолчанию - submit. В других режимах совместимости значением по умолчанию является кнопка. Когда элемент BUTTON представлен в форме, значение зависит от текущего режима совместимости документов. Windows Internet Explorer 8 и более поздних версий. Значение по умолчанию атрибута type зависит от текущего режима совместимости документов. В режиме стандартов IE8 значение по умолчанию представляет. В других режимах совместимости и более ранних версиях 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

Ответ 5

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