【问题标题】:Cache file mapped by url in the browser浏览器中通过url映射的缓存文件
【发布时间】:2011-06-16 11:43:27
【问题描述】:

我有一个映射在 /foo/*/image 之类的 url 中的方法,它下载图像,我希望浏览器缓存该图片。但我不明白。我可以在带有 firebug 的 Firefox 中看到请求没有被缓存,并且它也发生在 Chrome 中。

我试图在方法中将 Cache-Control 设置为“max-age=3600, public”,但它似乎没有做任何事情。

下面是Spring-MVC制作的控制器中调用方法的一段代码。

谁能帮帮我?

谢谢。

@RequestMapping(value="/foo/{id}/image", method=RequestMethod.GET)
    public void showImage(
            @PathVariable("id") String id,
            HttpServletRequest request,
            HttpServletResponse response,
            Model model) throws Exception{

        //add image to the response
        service.read(id, response);

        //mark the response as cacheable
        HttpServletResponse httpResp = ((HttpServletResponse) response);
        httpResp.setHeader("Cache-Control", "max-age=3600, public");
    }

【问题讨论】:

    标签: http caching servlets spring-mvc cache-control


    【解决方案1】:

    考虑使用<mvc:resources>。在那里你可以设置缓存。

    除此之外,请确保您的请求不会通过覆盖标头的代理,并确保响应不会被重定向。

    【讨论】:

    • 下载的图像没有存储在文件夹中,它存储在数据存储中,所以我认为我不能使用 mvc:resources
    • @ Bozho 这是题外话(但来自 JAVA): 你能解释一下setPreferredSize()setSize() 之间的区别吗?pack() 是做什么的?
    • @Bozho 我没有代理(它位于本地应用引擎服务器中),并且使用 service.read 方法中的 GAE 的 blobstore api 提供图像。而且我不会重定向响应 AFAIK。
    • 所以你设置了标题,但你没有进入浏览器?
    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 2012-06-28
    • 2010-10-02
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多