SpringBoot2.x配置静态文件缓存

HTTP浏览器缓存

对这部分知识不太熟悉的,可以先看一下这篇文章: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

浏览器缓存的过程:
SpringBoot2.x配置静态文件缓存_第1张图片

  1. 当第一次访问时,所有的静态资源文件没有缓存,需要请求服务下载对应的文件
  2. 当第二次页面加载时,因为我们开启了缓存,浏览器会判断是否有缓存
  3. 有缓存,需要判断,缓存是否过期,过期时间就是通过配置缓存有效期:max-age: 24h,实现的
  4. 如果没有过期,则静态文件直接读取浏览器缓存,不会向服务器重新访问资源在这里插入图片描述
  5. 如果没有缓存或者缓存已经过期,则需要请求服务器,并通过判断Last-Modified:响应资源的最后修改时间,是否更新,如果没有更新,返回304状态,读取浏览器缓存SpringBoot2.x配置静态文件缓存_第2张图片
  6. 如果更新了,则说明该文件的再服务器端已经发生了改变,浏览器需要重新加载更新该文件
  7. 至此一个完整的浏览器缓存加载页面静态资源的过程就算完成了
  8. 当浏览器向服务器请求后,无论是没有更新,返回304,还是有更新,重新加载文件,新一轮的缓存有效期生成,也就是之前过期的有效期,现在又重新开始计算时间,此时再访问静态文件,会直接读取缓存,直到缓存再次过期,再进行下一次的循环。
  9. 我的配置中没有使用Etag,因为它需要很多的md5运算,消耗较多的内存,我觉得我的系统暂时可以不需要这一层

静态资源版本控制

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

时间戳实现

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

<script>
    document.write('
                    
                    

你可能感兴趣的:(缓存,java,java,缓存)