SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)
昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载文件。这当然是不能忍受的,即使在不考虑文件大小的情况下,我们也希望我们的静态文件如js, css, json, img等,可以在刷新的时候尽量不重新加载,这样我们的页面会变得更有效率即使在网络不好的状况下。
那么问题来了:
我们如何在刷新浏览器时,使自己的项目中的任何可控静态文件,被浏览器缓存?
就简单说下我的思路和经历:(声明,作为一名前端,有些理解可能是跑偏的,欢迎指点。
另文章有引用看到的不错知识的连接,传送门走起~
文中的很多思考,后端可以略过不看,因为我对后台有很多不确定性
如果你只是想迅速知道结果,请看直达第五条后面)
1.当我获得这个需求后,我的第一个想法是从服务器端或者偏后台的的方向去寻求解决方法。但是由于我们作为一名前端开发者,我们总要先检查自己的前端是否可以完成,以及放在那一部分较好。很遗憾,前端好象对此无能为力(如果你有,欢迎指点)。此时,我们基本确定了自己需要研究的方向。
2.最简单的方式,打开百度,我们获得的第一类相关信息为SpringMVC 配置静态资源缓存,基本思路是通过在web.xml中配置filter,还需要通过Tomcat容器进行一些过滤配置。一篇关于Tomcat下MVC静态资源强缓存配置的文章~,很遗憾,SpringBoot并不支持这种在web.xml中配置过滤器,显然这不是我们需要的。
3.但我们至少缩小了我们的范围,继而我发现了页面在刷新请求资源时,使用的cache-contro为no-store.这时,由于我的SpringBoot项目,并没有进行特殊的配置,所以得出结论,如果不是SpringBoot内置的,就是通过Tomcat进行配置的。接着是另一篇传送门Tomcat配置Cache-Control~,但是通过配置之后发现并没有改变这些资源的Cache-Control,所以再一次兴奋起来,你又证明了一个不太可行的方式。
4.其实很少有文章或者资源讲述SpringBoot缓存静态资源的,有一部分是将数据请求的缓存,之后又问了几个师兄,又通过百度,发现了1.SpringBoot可以写类似于MVC的过滤类,通过过滤配置强缓存, 2. 通过SpringBoot +redis配置缓存我们的静态资源。这里事情来到了一个要写过滤类的代码,事情来到了一个转折,加上当时我有其他内容要修改,所以就把这个交给了我们后台的兄弟们。思路已经很清晰了,写过滤类,实现静态资源缓存。或者是更复杂的一些东西。但是实现,我就不行了。不过事情到这里并没有结束,,,因为有更好的方法
这里有一些我觉得可以了解的资源:
5.今天将近中午的时候,此项目前端的修改基本完成的时候,其实后台的兄弟也觉得实在不行就写Filter,但还是想找一种更合理简单的方法,我觉得这是很好的。我又继续我们自己的思考,如果有,那么一定是在SpringBoot内部进行设置,但是我们百度的总是SpringBoot和一些插件相结合进行控制(ex: EhCache),我觉得是自己对后台不理解导致的搜索盲区,最终误打误撞,找到了理想的解决方法:
通过配置application.properties
#资源缓存时间,单位秒
spring.resources.cache-period: 3600
# 开启gzip压缩
spring.resources.chain.gzipped=true
# 启用缓存
spring.resources.chain.cache=false
总算啰嗦完了!(想必你也是这种心情,终于听你哔哔完了)
写这篇文章算是一个记录,这个问题从昨天产生到解决中间过了大概有一天时间。但是真正思考这个问题的时间可能并没有多久,对自己能解决结果,真的是很意外。又觉得是值得记录的,因为证明了我之前有时候想的,前端和后台的开发思想,计算机思想,应该是一致的。嗯,也这么长时间没写博客了,献丑献丑~
(希望以后有时间把自己总结的前端的干货(想减少大家和我当时对前端的误解,其实前端的内容真的很多很多,就是总感觉这些大家只要看都能懂的,就总不想写。。)都能分享一下,哎~)
希望各位看官多多点赞,让我多在首页待一待好不~_~
SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)的更多相关文章
- spring-boot配置静态资源映射的坑:properties文件不能添加注释
如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...
- SpringBoot 配置静态资源映射
SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...
- springboot WebMvcConfigurer配置静态资源和解决跨域
前言 虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题.不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可 ...
- 【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域
勘误 有个朋友说:为什么我配置了WebMvcConfigurer,静态资源static依然能访问?! 这里是本人的失误,我在启动类中添加了EnableWebMvc注解(文章里却没有提及,最好的做法是放 ...
- springboot配置静态资源访问路径
其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/s ...
- Nginx 静态资源缓存配置
示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...
- nginx静态资源缓存与压缩
一.静态资源缓存 参考文章 (1)apache设置max-age或expires 这里需要修改.htaccess文件. <IfModule mod_headers.c> <Files ...
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...
- 清除nginx静态资源缓存
之前写过一篇如何配置nginx缓存及手动清除缓存的文章: http://www.cnblogs.com/Eivll0m/p/4921829.html 但如果有大量缓存需要清理,手动一条条清理就比较慢了 ...
随机推荐
- ssh连接原理介绍( 无密码连接登录的原理)
SSH(Secure Shell)一种在不安全网络上提供安全远程登录及其它安全网络服务的协议.由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x.(SSH 2.x的客户程序是不能 ...
- python字典作为统计记录工具
1.python 利用字典作为计数项,统计指定项的个数 #!/usr/bin/python ta={} key = "test" if not key in ta: ta[ ...
- 小强的HTML5移动开发之路(3)——HTML5与HTML4比较
来自:http://blog.csdn.net/dawanganban/article/details/17652873 在前面介绍了HTML5的新特性,新标签的使用,智能表单设计,引入多媒体对象,C ...
- 【一天一道LeetCode】#51. N-Queens
一天一道LeetCode系列 (一)题目 The n-queens puzzle is the problem of placing n queens on an n×n chessboard suc ...
- 开源数字媒体资产管理系统:Razuna
Razuna以一个使用Java语言编写的开源的数字媒体资产管理(Digital Asset Management)系统.功能很强大,可以用于管理各种格式的数字媒体资源. Razuna在本机的安装配置还 ...
- Stochastic Gradient Descent 随机梯度下降法-R实现
随机梯度下降法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 批量梯度下降法在权值更新前对所有样本汇总 ...
- Leetcode_75_Sort Colors
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43302343 Given an array with n ...
- Java集合之Map
Map架构: 如上图: (1)Map是映射接口,Map中存储的内容是键值对(key-value) (2)AbstractMap是继承于Map的抽象类,实现了Map中的大部分API. (3)Sorted ...
- mysql进阶(十五) mysql批量删除大量数据
mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM s ...
- ra_interface_lines_all 接口表各字段说明
note:Description and Usage of Fields in RA_INTERFACE_LINES Table [ID 1195997.1] 核心内容: Field Name and ...