Как управлять кэшем на странице JSP?

Я создал фильтр Сервлета со следующим кодом в 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.

5
задан BalusC 23 December 2009 в 15:54
поделиться

2 ответа

Для начала полный набор:

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 снова будут просто запрашиваться с сервера, а не из кэша браузера.

.
10
ответ дан 18 December 2019 в 14:47
поделиться

Мы также используем заголовок Last-Modified для поощрения браузера всегда получать новую версию.

setDateHeader("Last-Modified", (new Date())).getTime() ); // Установите последнюю измененную версию прямо сейчас. Однако я не уверен, что кнопка возврата браузера не будет использовать кэш. Все, что вы делаете с полями заголовков, будет оцениваться только при первой загрузке страницы, IIRC.

.
0
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: