Невозможно кэшировать изображения, обслуживаемые Spring MVC

Я пытаюсь обслуживать некоторые активы с помощью контроллера Spring MVC. Мои активы управляются базой данных и должны обслуживаться таким образом. Служба ищет метаданные ресурса из базы данных, считывает файл из файловой системы и создает ответ.

Вот как выглядит мой контроллер.

@Controller
@RequestMapping("/assets")
public class AssetController {

    @Autowired
    private AssetService assetService;

    @RequestMapping("/{assetName:.+}")
    public ResponseEntity getAsset(@PathVariable("assetName") String assetName) throws FileNotFoundException, IOException {
        Asset asset = assetService.findByName(assetName);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.valueOf(asset.getContentType()));
        headers.setCacheControl("max-age=1209600");
        headers.setLastModified(asset.getModifiedOn().getTime()); // always in the past

        return new ResponseEntity(assetService.toBytes(asset), headers, OK);
    }
}

Кажется простым и достаточно простым? Можно было бы надеяться увидеть браузер, кэширующий изображения. Но, несмотря на попытки всех комбинаций,Cache-ControlExpiresLast-Modified-On а такжеETagУ меня не было успеха.

Ниже приведены заголовки HTTP (ненужные заголовки удалены), которые выпадают во время двух последовательных запросов.

GET /adarshr-web/assets/Acer.png HTTP/1.1
Host: localhost:8080
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Cache-Control: max-age=1209600
Last-Modified: Sun, 21 Jul 2013 11:56:32 GMT
Content-Type: image/png
Date: Tue, 23 Jul 2013 21:22:58 GMT
----------------------------------------------------------

GET /adarshr-web/assets/Acer.png HTTP/1.1
Host: localhost:8080
If-Modified-Since: Sun, 21 Jul 2013 11:56:32 GMT
Cache-Control: max-age=0

HTTP/1.1 200 OK 

Ответы на вопрос(1)

Ваш ответ на вопрос