У меня есть страница Java/Wicket, которая генерирует файл JNLP, который запускает программное обеспечение моей компании. Этот класс дополнительно возьмет некоторые параметры URL и встроит их как аргументы в JNLP. Когда пользователь запустит этот файл JNLP, клиентское приложение выполнит некоторую функцию на основе тех параметров. Если клиентское программное обеспечение будет уже работать на машине, то поражение страницы JNLP вместо этого попытается подать эти параметры через удаленный вызов рабочему клиенту вместо того, чтобы запустить новую страницу.
Эта часть - то, где у меня есть проблемы. На IE Firefox и Chrome я мог открыть новый клиент, но пытающийся поразить тот же URL снова вместо этого возвратит файл JNLP. Я нашел, что очистка кэша браузера устраняет эту проблему на всех браузерах. Кроме того, я, может казаться, не поражаю точки останова в классе JNLP, который осуществляет мою догадку, что это - больше проблемы с запросом, чем что-то странное с Калиткой.
Я поместил следующий код в свой класс страницы, который расширяет org.apache.wicket.markup.html. WebPage:
@Override
protected void setHeaders(WebResponse response) {
getPageMap().remove(this);
HttpServletResponse httpServletResponse = response.getHttpServletResponse();
if (httpServletResponse != null) {
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.addHeader("Cache-Control", "no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0");
httpServletResponse.addHeader("Keep-Alive", "timeout=3, max=993");
}
}
Это, кажется, не работает, как Firefox 3.6 все еще, кажется, кэширует результат. IE 7 будет работать, но только после попытки ссылки я создаю несколько раз. Я не знаю много о веб-разработке и Калитке, и это плохо мне знакомо, таким образом, возможно, что я пропускаю что-то простое.
TL; DR: Как я заставляю страницу Wicket не кэшироваться на клиентском браузере?
Хак, используемый в некоторых внутренних компонентах Wicket (см., например, источник для org.apache.wicket.markup.html.image.NonCachingImage
), заключается в добавлении случайного шума в url.
По сути, если вы генерируете урлы, которые вызывает браузер, вы можете добавить параметр, игнорируемый веб-приложением, который изменяется случайным образом и обманывает браузер, заставляя его игнорировать свой кэш.
Я не очень хорошо знаю Wicket, но вы пробовали использовать WebResponse.setLastModifiedTime(Time time)
? Я знаю, что FF посылает заголовок If-Modified-Since
, на который ваш сервер отвечает 304 Not Modified
или обычным ответом.
Мне кажется естественным, что ваш сервер будет проверять lastModifiedTime
на WebResponse
, чтобы принять решение.
Если это не поможет, я бы предложил вам установить Firebug для Firefox и посмотреть на запросы и ответы.
Пожалуйста, проверьте следующую страницу: https://web.archive.org/web/20120104201334/http://palisade.plynt.com:80/issues/2008Jul/cache-control-attributes/
Firefox должен соблюдать "Cache-Control "заголовок.