为了账号安全,请及时绑定邮箱和手机立即绑定

Cache-Control设置不起效

Cache-Control设置不起效

翻过高山走不出你 2018-08-08 07:10:12
@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";     }现在我需要做浏览器缓存:请求一个url时,如果有缓存,就不访问后台像这样,我设置Cache-Control,但是浏览器中出现这样的情况。设置的参数并没有覆盖,然后缓存也不起效果;请求仍然访问后台
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

使用的是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";


查看完整回答
反对 回复 2018-08-23
  • 1 回答
  • 0 关注
  • 2205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信