2010-11-04 3 views
0

Я использую кэширование изображений, читая BLOB, а затем потоковая передача с использованием BufferedOutputStream. Я установил следующие заголовки:кеширование не работает при обновлении браузера

res.setHeader("Last-Modified", modDate); 
res.setHeader("Expires", expTime.toString()); 
res.setHeader("Cache-Control", "public, max-age=31536000"); 

Кэширование работает всегда, за исключением кнопки обновления. Если мы загружаем страницу с помощью меню, щелкните изображение, загружаемое из кеша, но если мы нажмем кнопку обновления браузера, это произойдет с сервера. Есть идеи?

+2

сервер должен проверить заголовок запроса 'If-Modified-Since' и отправить 304, если это необходимо; какое серверное программное обеспечение вы используете? – Christoph

+0

Мы используем jsp для веб-страниц – coder247

ответ

1

Различные браузеры имеют дело с кнопкой обновления по-разному.

Возможно, вы захотите зарегистрироваться this answer. Кроме того, посмотрите заголовки на запрос, который отправляется на сервер. Посмотрите, отправляет ли браузер заголовок If-modified-since.

Собственно, вы можете проверить все ответы на этот вопрос. Например, если вы используете Firefox и изначально сделали Ctrl- (обновление), Firefox не будет кэшировать его снова, пока браузер не будет закрыт.

+0

Я пробовал с firebug. И увидел, что когда я нажимаю кнопку меню приложения, загрузка изображений отсутствует. И если я нажимаю обновление, все изображения загружаются. Я могу увидеть If-modified-since в запросе. – coder247

0

Исправлена ​​проблема с этим.

получить дату с req.getHeader ("If-Modified-Since"); И сравните дату if-modified-since и дату из базы данных. Если они такие же, я возвращаю статус 304. Тогда он не будет изменен.

String modifiedSince = req.getHeader("If-Modified-Since"); 
    if(formattedLastAccess.equalsIgnoreCase(modifiedSince)){ 
     res.setStatus(304); 
    }else { // stream file } 
Смежные вопросы