缓存学习(三)CDN缓存(上)-CDN初认识

CDN

CDN的全称是Content Delivery Network,即内容分发网络。

其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可 以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等 原因,解决用户访问网站的响应速度慢的根本原因。

那么CDN底层主要是通过什么样的手段去实现的呢?

其实它就相当于在客户的就近的地区,布置了对应的节点,主要是将资源缓存在 CDN 节点上(并且把对应的一些静态资源,比如说图片、视频等这些资源预先先缓存到对应的节点上。)以后,在用户访问的时候,我们就可以直接通过节点去拉起对应的资源并返回给客户,就不需要再回源了。这样的操作就缩短了客户端到服务器端的一个链路,提升了整个站点的ISP、地域兼容性。

CDN节点数量

全国多个机房,每个机房多台服务器,CDN节点一般上百台

CDN 的缓存适用范围

CDN 对于常见的 HTTP 请求均是支持的,具体对不同请求方式的支持情况请参考表一。但是有一点需要注意的是虽然对这些类型的 HTTP 请求均是支持的,但是并不是对所有请求方式都会进行缓存的。 CDN 仅会对于 GET 请求进行缓存,而对于其他的请求均不进行缓存,仅是起到中间代理、转发的功能。(对于http协议里其他请求比如说put以及POST等动态回源的一些请求,CDN可能就不会去做任何缓存的处理,而是直接透传给源站,然后由源站进行对应的处理后返回给客户端。)因此我们建议添加 CDN 的站点源站最好能够实现动静分离。将动态请求和静态请求的内容独立成两个站点,而 CDN 仅仅加速静态站点中的资源。

                                                                        表一. CDN 对 HTTP 请求支持情况

请求方式 描述 是否支持
GET 从指定的资源请求数据 支持
POST 向指定的资源提交要被处理的数据 支持
HEAD 与 GET 相同,但只返回 HTTP 报头,不返回文档主体 支持
PUT 上传指定的 URI 支持
DELETE 删除指定资源 支持
OPTIONS 返回服务器支持的 HTTP 方法 支持
CONNECT 把请求连接转换到透明的 TCP/IP 通道 不支持

注意

CDN 处理 HEAD 请求时会将 HEAD 请求转换成 GET 请求回源,因此源站日志中记录的是 GET 请求。
CDN 仅支持 POST 和 PUT 方式发送带有请求体(BODY)的 HTTP 请求。

CDN缓存什么内容

缓存html、图片、css、xml等静态资源,不缓存含有?的动态地址、jsp、php,js文件也不缓存【除非特殊设置】

缓存原站返回HTTP状态为20*或304,不缓存其他状态(例如404,500,503)

CDN缓存内容的更新

a)用户首次请求,CDN从原站抓取后缓存,直到文件过期后有用户请求再次更新

b)程序主动通知CDN抓取

CDN返回response头解读

我们在实际使用的过程中,我们又如何查看当前这个文件到底有没有在CDN节点上缓存或者它缓存的时间是多少呢?

资源在经过CDN节点以后,一定会在对应的http的response头里加若干的字段,如图即是常见的通过 CDN 访问的响应头,可以根据 X-Cache 查看当前该资源是否有在 CDN的 L1 节点缓存,而查看 L2 节点的缓存情况则需要根据 Via 头中的第一部分查看,如果是 M 即是 MISS,表示对应的资源没有在对应的CDN节点上缓存;而出现 H表示对应的资源有在CDN节点上缓。X-Swift-SaveTime 表示该资源缓存到 CDN 节点上的 GMT 时间(相比于北京时间晚8小时);而 X-Swift-CacheTime 表示该资源在 CDN 节点上缓存多长时间会过期。

VIA字段

VIA字段,包含有四段信息,其中第一段和第三段会有一个M或者H的标识。第一段说明L2节点的缓存情况,第三段指的是L1节点的缓存情况,这两个其中有一个包含H,就表示对应的资源已经在CDN节点上进行了缓存。那这一次访问就不需要再回到源站拉取对应的资源了。

 

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注