Nginx设置缓存过期时间

  • A+
所属分类:系统文档
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)$ {
            #禁止缓存,每次都从服务器请求
             #add_header Cache-Control no-store;
             #设置过期时间60秒,60秒过后向服务器重新请求数据
             add_header Cache-Control max-age=60;
           }
js

注意:浏览器如果在过期时间内发现新的文件,不会使用缓存的数据,而是直接向服务器请求新的数据。

配置完nginx之后重启不能生效,必须先关闭进程再重新启动。

expires:优先级比Cache-Control低

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)?$
               {
               #设置缓存过期时间两分钟
                 expires 2m;
              # access_log off;
               }
js

2h:两小时

2d:两天

浏览器缓存机制

  • 强缓存:浏览器不与服务端协商直接取浏览器缓存
  • 协商缓存:浏览器先向服务器确认资源的有效性后才决定是从缓存中取资源还是重新获取资源

后端的静态资源会不定时地发生更新,而因为浏览器默认使用强缓存,会默认从浏览器缓存中取到过时的资源。

现在我们希望浏览器每次获取资源的时候都向后端确认资源是否更新,就要设置浏览器使用协商缓存

那么后端如何判断资源是否更新了呢?这时就要用到Etag和Last-Modified两项响应头。

每次收到一个静态资源的请求时,后端都将资源的最后修改时间(Last-Modified)、根据资源内容计算出来的Etag放在响应头给前端。

前端收到响应后将这两项缓存起来,然后在下次请求同样资源的时候,将这两项的内容放到If-Modified-Since和If-None-Match这两项请求头中。

服务端收到这两项后,会与资源当前生成的Etag和Last-Modified做比较,如果两者都一致,说明资源没有更新,服务端会返回304空响应;否则,说明资源有更新,服务端会将完整的资源内容返回

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin