首页 新闻 会员 周边

Cache-Control设置不起效

0
悬赏园豆:20 [已解决问题] 解决于 2018-01-05 09:05

现在我需要做浏览器缓存:请求一个url时,如果有缓存,就不访问后台

@RequestMapping("pic.html")
    public String pic(ModelMap map, HttpServletResponse response) {
        response.addHeader("Cache-Control", "public,max-age=310");
        long expires = new Date().getTime() + 10 * 60 * 1000;
        response.setDateHeader("Expires", expires);
        response.setHeader("Etag", "12345");
        
        map.put("test", "testPic");
        return "json";
    }

像这样,我设置Cache-Control,但是浏览器中出现这样的情况。

设置的参数并没有覆盖,然后缓存也不起效果;请求仍然访问后台

登顶的主页 登顶 | 初学一级 | 园豆:52
提问于:2018-01-03 15:26
< >
分享
最佳答案
0

使用的是SpringMVC,将“json”字符串配置成了一个view Bean。

 <!-- defined view by name -->
    <!-- 将“json”配置成一个view -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="4" />
    </bean>
    <bean id="json"
        class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />

然后查看MappingJackson2JsonView源代码发现,父类中有个参数disableCaching默认为ture。
注解:Default is {@code true}, which will prevent the client from caching the generated JSON (这将阻止客户端缓存生成的JSON)

所以找到了设置Cache-Control:no-cache, no-store, max-age=0的地方

修改方法:
增加一个bean配置,修改disableCaching值

    <bean id="jsonCanCache"
        class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" >
        <property name="disableCaching" value="false"></property>
    </bean>

java代码中最后返回新的字符串:return "jsonCanCache";

登顶 | 初学一级 |园豆:52 | 2018-01-05 09:03
其他回答(1)
0

Page是由Server判断IsModify决定的。

收获园豆:20
花飘水流兮 | 园豆:13560 (专家六级) | 2018-01-03 16:56

为什么设置了Cache-Control后,在页面会出现两个

支持(0) 反对(0) 登顶 | 园豆:52 (初学一级) | 2018-01-04 09:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册