кэширование не работает при обновлении браузера - PullRequest
0 голосов
/ 04 ноября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

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

Возможно, вы захотите проверить этот ответ .Также обратите внимание на заголовки запроса, который отправляется на сервер.Посмотрите, отправляет ли браузер заголовок If-Modified-Since.

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

0 голосов
/ 10 ноября 2010

Исправлена ​​проблема, подобная этой.

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

String modifiedSince = req.getHeader("If-Modified-Since");
    if(formattedLastAccess.equalsIgnoreCase(modifiedSince)){
        res.setStatus(304);
    }else {  // stream file }
...