您的位置:首页 > 编程语言 > Java开发

Spring4.x官方参考文档中文版——第21章 Web MVC框架(28)

2017-02-04 16:57 501 查看
21.14 HTTP缓存支持
        一个好的HTTP缓存能够显著改善web应用及其客户端的体验。HTTP响应报头中的’Cache-Control’就是为其负责的。紧接这个报头后面可以有如’Last-Modified’和’ETag’这样的报头。
        ‘Cache-Control’这个HTTP响应报头会给私有缓存(如:浏览器)和公有缓存(如:代理服务器)提供关于怎样缓存这些HTTP响应的建议。
        mvc-config-static-resources(MVC静态资源配置):ETag(实体标签),是一个符合HTTP/1.1 web服务器的,用于判断在指定URL中是否有变化的内容。它也可以被看作是Last-Modified报头的继任者。当服务端返回带有Etag报头的响应时,客户端可以在随后含有If-None-Match报头的GET请求中使用这个报头。如果其内容没被改变,服务端会返回304:not Modified错误。
    本小节阐述了在Spring Web MVC应用中可以以此方式来配置HTTP缓存。
 
21.14.1 HTTP报头:Cache-Control
        Spring Web MVC可以支持在应用中,以各种各样的方式来配置”Cache_Control”。在RFC7234 Section 5.2.2完整阐述了这个报头和其可能的指令的同时,也有一些方法来把其应用到一些常见的情况中。
    Spring Web MVC在一些它的API中,使用一种配置规则:
setCachePeriod(int seconds):

n  如果是-1,则不会生成’Cache-Control’响应报头。
n  如果是0,会避免缓存,会使用’Cache-Control: no-store’这个指令。
n  如果这个值n大于0,缓存就会在指定响应中保持n秒,使用‘Cache-Control: max-age=n’这个指令。

        CacheContrl这个类可以使”Cache-Control”的指令生成时变得更加简单,还使开发者建立自己的HTTP缓存机制时更加方便。一旦这个类建立了,可以把其作为一个入参,在一些Spring Web MVC 的API中来使用它。

// 缓存一小时 - "Cache-Control: max-age=3600"
CacheControlccCacheOneHour = CacheControl.maxAge(1, TimeUnit.HOURS);

// 避免缓存 - "Cache-Control: no-store"
CacheControl ccNoStore =CacheControl.noStore();

// 在公有和私有缓存中储存10天,
// 公有缓存不能转为响应
//"Cache-Control: max-age=864000, public, no-transform"
CacheControl ccCustom =CacheControl.maxAge(10, TimeUnit.DAYS)
.noTransform().cachePublic();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息