Я создал фильтр Сервлета со следующим кодом в doFilter:
HttpServletResponse httpResponse = (HttpServletResponse)response;
httpResponse.setHeader("Cache-Control","no-cache");
httpResponse.setHeader("Pragma","no-cache");
httpResponse.setDateHeader("Expires", 0);
chain.doFilter(request, response);
Я хочу удостовериться, что ничто не кэшируется в Клиенте, и каждый запрос (даже от кнопки "Назад" Браузера) направлены к Серверу.
Но, даже после реализации вышеупомянутого фильтра, некоторые страницы кэшируются (доступная кнопка "Назад" браузера использования).
И другие страницы, которые не кэшируются, показывают, что Веб-страница Истекла ошибка в Internet Explorer.
Для начала полный набор:
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpResponse.setDateHeader("Expires", 0); // Proxies.
для работы под каждым Firefox требуется отсутствие магазина
и подтверждение
.
Но даже после реализации вышеописанного фильтра некоторые страницы кэшируются (доступны с помощью кнопки возврата браузера).
Как вы его протестировали? Эти заголовки на самом деле не позволяют браузеру запрашивать страницу из кэша браузера, а не напрямую с сервера. Лучшим тестом является наличие фильтра Filter
для прослушивания /*
и добавление отладочного сообщения со следующим ароматом:
HttpServletRequest httpRequest = (HttpServletRequest) request;
String method = httpRequest.getMethod();
String URI = httpRequest.getRequestURI();
System.out.println(method + " request invoked on " + URI);
Это должно распечатать действительные запросы. Также убедитесь, что вы не переопределили заголовки самой страницы JSP, используя теги HTML .
И другие страницы, которые не кэшированы, покажите ошибку Web Page Expired в Internet Explorer.
Вы можете получить это только в том случае, если некэшированный запрос был POST
запросом, а не GET
запросом. Запросы GET
снова будут просто запрашиваться с сервера, а не из кэша браузера.
Мы также используем заголовок Last-Modified для поощрения браузера всегда получать новую версию.
setDateHeader("Last-Modified", (new Date())).getTime() ); // Установите последнюю измененную версию прямо сейчас.
Однако я не уверен, что кнопка возврата браузера не будет использовать кэш. Все, что вы делаете с полями заголовков, будет оцениваться только при первой загрузке страницы, IIRC.