昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载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 配置静态资源缓存 (以及其中的思考经历)的更多相关文章

  1. spring-boot配置静态资源映射的坑:properties文件不能添加注释

    如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...

  2. SpringBoot 配置静态资源映射

    SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...

  3. springboot WebMvcConfigurer配置静态资源和解决跨域

    前言 虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题.不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可 ...

  4. 【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    勘误 有个朋友说:为什么我配置了WebMvcConfigurer,静态资源static依然能访问?! 这里是本人的失误,我在启动类中添加了EnableWebMvc注解(文章里却没有提及,最好的做法是放 ...

  5. springboot配置静态资源访问路径

    其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/s ...

  6. Nginx 静态资源缓存配置

    示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...

  7. nginx静态资源缓存与压缩

    一.静态资源缓存 参考文章 (1)apache设置max-age或expires 这里需要修改.htaccess文件. <IfModule mod_headers.c> <Files ...

  8. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  9. 清除nginx静态资源缓存

    之前写过一篇如何配置nginx缓存及手动清除缓存的文章: http://www.cnblogs.com/Eivll0m/p/4921829.html 但如果有大量缓存需要清理,手动一条条清理就比较慢了 ...

随机推荐

  1. 数据从oracle转换到mysql

    因为项目变更,需要把数据从oracle里转到mysql里. 第一个想法,自己写代码. 20分钟后,算了,还是找找工具吧. 第二步: 下了一个工具,二十分钟后,师兄发现,表的结构是倒完了,但是有的表数据 ...

  2. TCP状态转换

    最近笔试遇到一个题目:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解.只要理解了下面的状态转换图,很容易回答上述问题. 在此,将& ...

  3. Dynamics CRM2013 Lookup Filtering using addCustomFilter

    dynamics crm中对lookup视图的过滤是一个很平常性的需求,在2011的时候都是用添加自定义视图的方式例如下面这段示例代码 <span style="font-size: ...

  4. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十七)

    切换回Xcode,在GameScene.m中添加新的实例变量:_winLayer. 接下来在第一个选手到达终点时,我们可以完成选手胜利的动画特效了. 首先,在GameScene.m中添加一个新方法pl ...

  5. 高通 MSM8K bootloader : SBL1 .

    一. MSM8K Boot Flow 图1: 高通MSM8K平台bootloader启动流程基本类似,但具体各平台,比如MSM8974.MSM8916.MSM8994等,会有微小区别. 从上图,可以看 ...

  6. HTTP2概述

    HTTP/2 提供了HTTP语义的传输优化.HTTP/2支持所有HTTP/1.1的核心特征,并且在其他方面做的更高效. HTTP/2中基本的协议单位是帧.每个帧都有不同的类型和用途.例如,报头(HEA ...

  7. 如何取得ChipmunkConstraint实例对象的私有属性

    在 如何用代码禁用SpriteBuilder中创建的关节 一篇中提到了要想禁用一个关节就需要将其无效化. 然后我们在重新创建新关节时,可以参考该关节的原始参数. 但是代码中只能直接访问到bodyA和b ...

  8. 基于ARM-contexA9蜂鸣器驱动开发

    上次,我们写了一个LED的驱动程序,这一节,我们只需稍微改动一下就可以实现蜂鸣器的驱动,让我们来看看吧. 还是跟之前一样,先找电路图,找到电路板上对应的引脚和相关联的寄存器. 1.看电路图 (1)蜂鸣 ...

  9. CCT之CAMERA TUNNING调试学习总结

    原创链接:点击打开链接 对于MT6589平台camera调试的学习总结,camera调试学习的是对于raw类sensor的调试,对于yuv格式的sensor是由FAE帮助我们调试的. 首先在调试一个c ...

  10. Linux - crontab的创建以及注意事项

    [root@www ~]# crontab [-u username] [-l|-e|-r] 选项与参数: -u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排 ...