前言上一篇互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里老顾介绍了CDN相关的知识,最后留了一下问题,就是缓存控制,今天老顾介绍一下如何控制缓存?
Cache Control响应头首先我们先来看一下Cache Control这个概念,我们先看一下访问一个网站,观察一下响应头部
文章插图
我们发现cache-control的值为max-age=31536000,从字面上面就能够猜出它的含义,就是服务端告诉客户端此信息可不可以缓存,以什么样的策略进行缓存;cache-control有哪些类型的值呢?
【CDN缓存控制原理,你了解多少?】1、private:客户端可以缓存
2、public:客户端和代理服务器可以缓存
小伙伴们会疑惑什么是代理服务器可以缓存?我们用户电脑访问web站点之间,很有可能会经过类似Nginx的反向代理服务器,也有可能会经过我们正向代理的服务器,也有可能会经过CDN网络;因此我们中间层的服务节点,发现cache-control的值为private时,就认可只有发起请求的客户端能够缓存,作为代理服务节点是不能够缓存的 。如为public时,代理服务器也可以缓存 。
3、max-age:缓存的内容将在xxx秒后失效
这个意思就是在客户端收到信息后,信息会缓存xxx秒;过了xxx秒客户端必须重新获取信息 。4、no-store:不缓存请求的任何返回内容
不缓存请求返回的任何内容5、no-cache:强制向服务器端再验证一次
no-cache和no-store的区别就是,no-cache会缓存请求返回的内容,而no-store不缓存;但no-cache时,在下次用缓存的内容时,需要向服务器验证一下,缓存到底能不能用 。逻辑流程图
文章插图
流程图中,服务根据自身的业务,设置cache-control的值为:no-store、no-cache等,如:
Cache-Control: public, max-age=86400在逻辑流程图中,有一个环节就是重新验证,就是验证缓存内容是否有效,那验证逻辑是什么,怎么验证?
ETag验证ETag:资源唯一标识
一般会把请求的内容做md5加密,返回唯一的标识;会把ETag的值一起返回给浏览器;浏览器会把ETag存储下来 。
Etag: "5d8c72a5edda83343d6aere"下一次请求时将Etag一并带过去给服务器,服务器只需要比较客户端传来的ETag跟自己服务器上该资源的ETag是否一致,就能很好地判断资源相对客户端而言是否被修改过了 。
如果服务器发现ETag匹配不上,那么直接以常规GET 200状态码形式将新的资源(当然也包括了新的ETag)发给客户端;如果ETag是一致的,则直接返回304状态码客户端直接使用本地缓存即可 。那么客户端是如何把标记在资源上的ETag传回给服务器的呢?请求报文中有两个首部字段可以带上ETag值:
1、If-None-Match: ETag-value
If-None-Match: "5d8c72a5edda83343d6aere" 告诉服务端如果ETag没匹配上需要重发资源数据,否则直接回送304和响应报头即可 。当前各浏览器均是使用的该请求首部来向服务器传递保存的ETag值 。
2、If-Match: ETag-value
告诉服务器如果没有匹配到ETag,或者收到了“*”值而当前并没有该资源实体,则应当返回412(Precondition Failed) 状态码给客户端 。否则服务器直接忽略该字段 。需要注意的是,如果资源是走分布式服务器(比如CDN)存储的情况,需要这些服务器上计算ETag唯一值的算法保持一致,才不会导致明明同一个文件,在服务器A和服务器B上生成的ETag却不一样 。
ETag优点:
1、可以更加精确的判断资源是否被修改,可以识别一秒内多次修改的情况 。缺点:
2、不存在版本问题,每次请求都回去服务器进行校验 。
1、计算ETag值需要性能损耗 。Last-Modified验证服务器将资源传递给客户端时,会将资源最后更改的时间以“Last-Modified: GMT”的形式加在实体首部上一起返回给客户端 。
2、分布式服务器存储的情况下,计算ETag的算法如果不一样,会导致浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时发现ETag不匹配的情况 。
Last-Modified: Sun, 28 Apr 2019 02:23:05 GMT
推荐阅读
- Nginx网站使用CDN之后禁止用户真实IP访问的方法
- 6个常见的高并发缓存问题,你知道几个?
- 干茶含水量般控制在
- 风险防控怎么做 平台公司风险控制措施
- 防御DDOS攻击选高防CDN还是高防IP
- CDN原理 CDN技术是什么
- 没看这篇干货,别说你会使用“缓存”
- 控制欲太强的家庭,是一场灾难
- 图解一致性哈希算法,分布式缓存就是这么简单
- 投屏+电视盒+语音控制 电视果5S PLUS 奇异果特别版测评