摘要: 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 缓存情况示意图
作者:烨烁
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com
相关推荐
阿里云视频云产品架构师 南淼在2018云栖大会·上海峰会中做了题为《阿里云CDN-金融政企CDN最佳实践》的分享,就阿里云CDN、金融政企主要产品与解决方案、阿里云CDN 、阿里云CDN服务体系等方面的内容做了深入的分析。
金融政企CDN最佳实践.pptx
本脚本用于清除AWS上的CDN(即cloudfront)的缓存 使CDN缓存过期,重新回源拉去
平台化CDN基础架构——ATS缓存系统
阿里云CDN加速配置阿里云CDN加速配置阿里云CDN加速配置阿里云CDN加速配置阿里云CDN加速配置阿里云CDN加速配置
CDNSoft推出的CDN服务器节点搭建软件是一套基于Delphi开发的CDN服务器配置软件,高效,稳定,安全! CDN配置软件可帮助大中小站长或大中小企业低成本,轻松构建自己的CDN网络或服务器群,提供专业的CDN软件,更好的CDN技术...
文件过期前从 CloudFront 边缘缓存中删除文件 通过边缘缓存使文件失效。查看器下次请求文件时,CloudFront 将返回源以获取文件的最新版本。
CDN一键配置V2.0.rar win2003 Cdn专用
阿里云-飞天七部李克在2017杭州云栖大会中做了题为《CDN数据化实践》的分享,就业务背景,数据需求,数据收集,数据分析,数据应用做了深入的分析。
了解和学习阿里云 CDN 的工作原理非常重要,这对于网站优化、解决用 户问题都有非常大的帮助。本文主要介绍了阿里云 CDN 的加速原理和缓存策略,举 了一些实际的例子方便读者能清晰地理解阿里云 CDN。
服务器cdn集群工具,带缓存,squid
CDN配置相关文档。简单的CDN 部署原理和配置过程。全称Linux环境,包括安装和使用。
2.免费的CDN服务器的稳定性和加速效果都不是很行。 3.付费的CDN服务器一般都贵的要死,一些草根站长根本用不起。 一、CDN服务器搭建前准备(本文以LuManager来搭建CDN服务器) 1.找一个国内访问速度快的服务器来安装...
企业员工内部配下,CDN培训 1. 什么是CDN 2. CDN与商城的关系 3. CDN如何助理商城大促
七牛融合CDN实践.pdf
CDN运营支撑平台架构实践
智能CDN调度系统实践-Wood 智能CDN调度系统实践-Wood 智能CDN调度系统实践-Wood