美文网首页HTTPWeb前端之路程序员
【CDN 最佳实践】CDN缓存策略解读和配置策略

【CDN 最佳实践】CDN缓存策略解读和配置策略

作者: 阿里云云栖号 | 来源:发表于2017-09-19 15:05 被阅读375次

摘要:CDN 作为内容分发网络主要是将资源缓存在 CDN 节点上,然后后续访问即可直接通过 CDN 节点将资源返回给客户端,而不再需要回到源站服务器以加快请求速度。那么 CDN 到底对于哪些请求加速呢?其缓存规则和缓存时间是怎么样的呢?怎么样的缓存规则更加合理呢?本文就对 CDN 的缓存规则解读。

CDN 的缓存适用范围

       CDN 对于常见的 HTTP 请求均是支持的,具体对不同请求方式的支持情况请参考表一。但是有一点需要注意的是虽然对这些类型的 HTTP 请求均是支持的,但是并不是对所有请求方式都会进行缓存的。 CDN 仅会对于 GET 请求进行缓存,而对于其他的请求均不进行缓存,仅是起到中间代理、转发的功能。因此我们建议添加 CDN 的站点源站最好能够实现动静分离。将动态请求和静态请求的内容独立成两个站点,而 CDN 仅仅加速静态站点中的资源。

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

注意

1. CDN 处理 HEAD 请求时会将 HEAD 请求转换成 GET 请求回源,因此源站日志中记录的是 GET 请求。

2. CDN 仅支持 POST 和 PUT 方式发送带有请求体(BODY)的 HTTP 请求。

CDN缓存配置

CDN 的缓存配置截图如图 1 所示。缓存配置包括目录和后缀名两种形式,并且可以针对不同的缓存配置设置不同的权重以决定其优先级。其中后缀名即是针对于特定后缀名设置的缓存规则,而目录则是对该目录及其子目录下的所有文件均生效的。当对同一文件同时设置了后缀名和目录的缓存的话会先依据优先级权值先进行选择,在优先级权值相同的情况下会后缀名策略优先。

图 1. CDN 缓存配置示意图

CDN 缓存规则

       总体而言,CDN 所有的缓存规则均可以按照图 2 中所表述的内容进行判断。下面我们对图 2 中的详细内容信息解读。

图 2. CDN 缓存规则示意图

1. CDN 处理一个资源是否缓存首先是需要看源站针对于该资源配置的缓存设置。因为源站的不缓存策略是用户自身控制的,因此是有最高的优先级的,当源站配置了缓存规则则转 2 。而如果没有进行任何配置的话则转 3 ,而对于浏览器缓存情况转 7 。

2. 当源站配置了以下的规则时, CDN 会认为该资源源站不允许 CDN 缓存,并且这种情况下浏览器也是不会做缓存的,因此会每次请求该资源时都回源站,无法进行缓存加速,如果没有则转 4 :

1)有s-maxage=0,no-cache,no-store,private其中一种

2)如果没有s-maxage或者s-maxage=0,并且有max-age=0.

3)带Pragma: no-cache

3. 在源站没有配置缓存规则需判断 CDN 控制台是否配置缓存规则,如果配置了缓存规则转 4 ,如果没有配置缓存规则转 5 。

4. 需判断 CDN 控制台是否有配置缓存规则,如果配置了缓存规则的话那么

CDN 上的缓存策略将覆盖源站的缓存策略,而控制台缓存配置的优先级为:

1)权重越高的优先级越好;

2)同等优先级后缀名优先级高于目录优先级;

3)相同权重且相同优先级则随机匹配(建议避免第三种场景),如果没有配置缓存规则则转 6 。

5. 需根据源站的缓存规则进行缓存,常见的源站缓存规则有 Cache-Control和 Expires 头,根据 HTTP 协议 Cache-Control 的优先级高于 Expires 头,并且 s-maxage 设置高于 max-age 设置。

6. 需遵循 CDN 默认缓存规则,默认缓存规则包括:

1)对于 response 头没有包括 Etag 或者 Last-Modified 头的文件默认是不缓存的(一般认为此类文件为动态文件);

2)没有 Last-Modified 头的文件默认但是有 Etag 头的缓存 10 秒;

3)对于有 Last-Modified 头的会按照(当前时间 - Last-Modified 时间) * 0.1,并且将其限制在 [10,3600] 区间内。

7. 对于源站设置了不缓存的规则时浏览器是不缓存的;如果 CDN 修改了 Cache-Control 或者 Expires 头时,浏览器会按照该修改头缓存;如果没有修改即会按照源站的策略缓存。

CDN 缓存情况查看

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

图 3. CDN 缓存情况示意图

作者:烨烁

相关文章

  • 【CDN 最佳实践】CDN缓存策略解读和配置策略

    摘要:CDN 作为内容分发网络主要是将资源缓存在 CDN 节点上,然后后续访问即可直接通过 CDN 节点将资源返回...

  • java专题之大型分布式系统中的缓存架构

    缓存概述 缓存的分类 CDN缓存 CDN缓存是什么 CDN(Content Delivery Network内容分...

  • CDN | CDN缓存规则及优先级

    阿里云CDN 参考文档:阿里云CDN - 配置缓存过期时间[https://help.aliyun.com/doc...

  • CDN 调度策略

    什么是 CDN 的调度? CDN 调度是指通过各种策略将客户端请求调度到合理的目标机房。以达到成本、质量(可用性、...

  • 前端性能优化-缓存利用

    缓存分类 1.CDN缓存2.DNS缓存3.客户端缓存 1.CDN缓存 CDN可以理解分布世界各地的节点,当用户浏览...

  • CDN机制

    CDN,Content Delivery Network,基于内容的分布式分发网络。 CDN是一个经策略性部署的整...

  • CDN缓存

    一、CDN是什么? http缓存是浏览器端缓存,cdn是服务器端缓存。 举个例子来说明cdn的作用...

  • 06.CDN 的缓存与回源机制解析

    内容出自前端性能优化原理与实践,我作为笔记简单记录下。 CDN的缓存与回源机制解析 CDN (Content De...

  • 高性能PHP web站点架构思路

    静态内容优化 动静态分离 浏览器的静态内容缓存策略 利用cdn 反向代理 可以使用浏览器的本地计算和存储 浏览器并...

  • 2018-12-12

    CDN缓存 浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存...

网友评论

    本文标题:【CDN 最佳实践】CDN缓存策略解读和配置策略

    本文链接:https://www.haomeiwen.com/subject/eqgwsxtx.html