使用SpringBoot2.x配置静态文件缓存

HTTP浏览器缓存

对这部分知识不太熟悉的,可以先看一下这篇文章

配置文件yml配置

spring: resources: static-locations: classpath:/static/,classpath:/views/,classpath:/templates/ chain: strategy: #MD5实现 content: enabled: true paths: /** #版本号管理(与MD5实现方式同时存在时,需要指定不同的路径,来分别实现对应的文件管理) #fixed: # 开启版本控制策略,认为false #enabled: true #paths: /**,/v1.0.0/** #version: v1.0.0 cache: true compressed: false enabled: true #缓存 cache: cachecontrol: cache-public: true # 缓存有效期 24小时 max-age: 24h # 资源缓存时间,单位天,7天 period: 7d

浏览器缓存的过程:

1、当第一次访问时,所有的静态资源文件没有缓存,需要请求服务下载对应的文件

2、当第二次页面加载时,因为我们开启了缓存,浏览器会判断是否有缓存

3、有缓存,需要判断,缓存是否过期,过期时间就是通过配置缓存有效期:max-age: 24h,实现的

4、如果没有过期,则静态文件直接读取浏览器缓存,不会向服务器重新访问资源

5、如果没有缓存或者缓存已经过期,则需要请求服务器,并通过判断Last-Modified:响应资源的最后修改时间,是否更新,如果没有更新,返回304状态,读取浏览器缓存

6、如果更新了,则说明该文件的再服务器端已经发生了改变,浏览器需要重新加载更新该文件

7、至此一个完整的浏览器缓存加载页面静态资源的过程就算完成了

8、当浏览器向服务器请求后,无论是没有更新,返回304,还是有更新,重新加载文件,新一轮的缓存有效期生成,也就是之前过期的有效期,现在又重新开始计算时间,此时再访问静态文件,会直接读取缓存,直到缓存再次过期,再进行下一次的循环。

9、我的配置中没有使用Etag,因为它需要很多的md5运算,消耗较多的内存,我觉得我的系统暂时可以不需要这一层

静态资源版本控制

Spring 认提供了静态资源版本映射的支持

当我们的资源内容发生改变时,由于浏览器缓存,用户本地的资源还是旧资源,为了防止这种情况发生导致的问题。我们可能会选择在资源文件后面加上参数“版本号”或其他方式。

时间戳实现

在htnl中一如静态文件时,加一个时间戳的后缀,每次加载时间戳是不一样的,这样能保证浏览器每次都向服务器重新请求加载

MD5实现

首先在application.yml配置(在最上边的配置文件内容中已经有了)

spring: resources: chain: strategy: #MD5实现 content: enabled: true paths: /**

其次,如果您恰巧和我一样使用Thymeleaf作为模板引擎,则可以和我一样使用@bean语法直接从模板访问ResourceUrlProvider bean。

注意:如果你的js文件没有修改,或者修改没重启,MD5的值可能不会改变,当你重启服务后你会看到你修改过后的文件MD5也随之改变了。

简单看了下源代码,MD5的计算是通过 ContentVersionStrategy 这个类实现的。此VersionStrategy实现根据资源的内容计算MD5哈希值,并将其附加到文件名后面,也就是你不改变内容MD5值是不会变的

这种方式类似于Etag的方式,只不过,我们可以自主控制对哪些文件进行md5计算。

问题:使用ControllerAdvice这种方式,我尝试了以后,不能用,html中使用urls,报错,不识别,不知道什么原因,(有知道原因的可以告知一下代码如下:

代码如下:

@ControllerAdvice public class ControllerConfig { @Autowired ResourceUrlProvider resourceUrlProvider; @modelattribute("urls") public ResourceUrlProvider urls() { return this.resourceUrlProvider; } }

这样写,就不行,页面会报错,不识别urls

版本号实现

在application.yml或者application.properties中增加配置文件

spring: resources: static-locations: classpath:/static/,classpath:/views/,classpath:/templates/ chain: strategy: #版本号管理(与MD5实现方式同时存在时,需要指定不同的路径,来分别实现对应的文件管理) fixed: enabled: true paths: paths: /**,/v1.0.0/** version: v1.0.0

其次,如果您恰巧和我一样使用Thymeleaf作为模板引擎,则可以和我一样使用@bean语法直接从模板访问ResourceUrlProvider bean。

正常来说,配置了相应的映射路径,则系统便会在文件路径最前面加上相应的版本号,当我们每次修改只需要更新版本号的设置,客户端就会自动请求最新的数据了。

同样的看了下此VersionStrategy的实现是FixedVersionStrategy类,来使固定版本字符串作为资源路径的前缀。

如图,文件的路径最前面会加上对应的版本号

总结

通过以上的配置,我们就可以做到即可以对一些第三方或者不会变的静态文件进行缓存,减少每次加载文件的访问量,又可以对一些需要经常更改和变化的文件实现了单独的控制,保证他可以及时更新,而不会一下一篇:SpringBoot全局配置long转String丢失精度的问题解决

热门搜索

缓存静态文件 

静态缓存 

缓存配置 

SpringBoot2.x 

配置静态IP 

相关文章

使用SpringBoot2.x配置静态文件缓存

2021-09-10阅读(3141)评论(0)推荐()

这篇文章主要介绍了使用SpringBoot2.x配置静态文件缓存的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

ThinkPHP静态缓存简单配置和使用方法详解

2021-09-13阅读(6842)评论(0)推荐()

这篇文章主要介绍了ThinkPHP静态缓存简单配置和使用方法,结合实例形式详细分析了ThinkPHP静态缓存简单配置方法,常用参数含义与相关使用技巧,需要的朋友...

使用Nginx缓存服务器上静态文件设置方法

2021-09-12阅读(4428)评论(0)推荐()

这篇文章主要介绍了使用Nginx缓存服务器上的静态文件,文中给大家提到了Nginx缓存的优点及设置方法,通过实例相结合的形式给大家介绍的非常详细,需要的朋友可以...

IIS7、iis7.5中禁止缓存单个静态文件的配置方法

2021-10-19阅读(4342)评论(0)推荐()

这篇文章主要介绍了IIS7、iis7.5中禁止缓存单个静态文件的配置方法,需要的朋友可以参考下

如何在Nginx中配置缓存静态文件

2021-10-18阅读(4712)评论(0)推荐()

本篇文章主要介绍了如何在 Nginx 中缓存静态文件配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

禁止IIS缓存静态文件方法(png,js,html等)

2021-10-13阅读(4615)评论(0)推荐()

IIS为了提高性能认情况下会对静态文件js,html,gif,png等做内部缓存,这个缓存是在服务器iis进程的内存中的。

Nginx缓存文件与动态文件自动均衡的配置脚本

2021-10-18阅读(9810)评论(0)推荐()

Nginx (engine x) 是一个性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。这篇文章主要介绍了Nignx缓存文件与动态文件...

取消

有人回复邮件通知

提交评论

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...