Java/Калитка - Как мешать браузерам кэшировать страницы?

У меня есть страница 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 не кэшироваться на клиентском браузере?

7
задан Scott Faria 16 August 2010 в 20:04
поделиться

3 ответа

Хак, используемый в некоторых внутренних компонентах Wicket (см., например, источник для org.apache.wicket.markup.html.image.NonCachingImage), заключается в добавлении случайного шума в url.

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

5
ответ дан 7 December 2019 в 07:38
поделиться

Я не очень хорошо знаю Wicket, но вы пробовали использовать WebResponse.setLastModifiedTime(Time time)? Я знаю, что FF посылает заголовок If-Modified-Since, на который ваш сервер отвечает 304 Not Modified или обычным ответом.

Мне кажется естественным, что ваш сервер будет проверять lastModifiedTime на WebResponse, чтобы принять решение.

Если это не поможет, я бы предложил вам установить Firebug для Firefox и посмотреть на запросы и ответы.

0
ответ дан 7 December 2019 в 07:38
поделиться

Пожалуйста, проверьте следующую страницу: https://web.archive.org/web/20120104201334/http://palisade.plynt.com:80/issues/2008Jul/cache-control-attributes/

Firefox должен соблюдать "Cache-Control "заголовок.

2
ответ дан 7 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

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