全部产品
Search
文档中心

CDN:缓存相关常见问题

更新时间:Jun 24, 2026

本文为您介绍CDN缓存相关的常见问题。

了解基础概念

CDN缓存清理机制是什么?

缓存在CDN节点上的资源,如果该资源的访问热度较低(同一个CDN节点上的同一个资源被客户端访问的频次较低),那么很可能会在缓存过期之前被CDN节点上其他访问热度较高的资源覆盖。

CDN默认的缓存规则是什么?

CDN节点在收到源站响应的文件资源的时候,会按照以下的缓存规则来执行(数值越小,优先级越高):

缓存优先级

  1. 源站响应pragma:no-cachecache-control:no-cache(或者no-store,或者max-age=0)时,CDN遵循源站的策略,完全不缓存资源。

  2. CDN控制台设置的缓存过期时间或者状态码过期时间。

    说明

    CDN请求同时命中多条规则,有且仅有一条规则会生效,优先级为:权重>规则创建时间。

    • 有多条缓存规则的情况下,建议每条缓存规则都设置不同的权重(权重越大优先级越高),通过权重来控制规则执行优先级。

    • 权重相同的规则生效优先级:先创建的>后创建的,与规则类型无关。

  3. 源站配置其他缓存规则,优先级由高至低为:cache-control>expires>last-modified>ETag

    1. 如果源站响应中携带了cache-control,参数值包含max-ages-maxage,并且max-ages-maxage的值大于0,则使用cache-control设置缓存过期时间,例如:cache-control:max-age=3600。如果同时存在max-ages-maxage,则以s-maxage的值为准。

    2. 如果源站响应中没有携带cache-control,但是携带了Expires,则使用Expires设置缓存过期时间,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT。

    3. 如果源站响应中没有携带cache-controlExpires,但是携带了last-modified,则使用以下规则来计算缓存时间:使用公式(当前时间-last-modified)* 0.1,计算结果在10秒~3600秒及之间的,取计算结果时间;小于10秒的,按照10秒处理;大于3600秒的,按照3600秒处理。

    4. 如果源站响应中没有携带cache-controlExpireslast-modified,但是携带了ETag,缓存10秒。

  4. 如果源站返回的数据中,cache-controlexpireslast-modifiedETag这些缓存策略相关的响应头都没有携带,则默认不缓存。

缓存策略中「源站响应 Cache-Control」的「源站」指什么?是指 OSS 配置还是 HTML 代码中的 <meta> 标签?

「源站」指 OSS、ECS 等后端存储或应用服务器返回的 HTTP 响应头,而非 HTML 代码中的<meta>标签。

CDN在判断缓存策略时,只读取源站在 HTTP 响应头中返回的Cache-ControlExpires等字段;HTML <meta>标签中的http-equiv="Cache-Control"仅对浏览器生效,CDN不会解析。

缓存配置新增的 4 个开关(优先遵循源站缓存策略、忽略源站不缓存标头、客户端跟随CDN缓存策略、强制内容重新验证)保持默认关闭,是否与旧版仅配置过期时间的效果一致?

一致。以上 4 个开关默认均为「关闭」状态时,CDN仍按控制台配置的缓存过期时间规则进行缓存,与未新增这些选项前的行为完全相同。各开关的具体作用请参见配置 CDN 缓存过期时间中的操作步骤参数说明。

创建CDN加速域名时选择不同业务类型(如图片小文件、大文件下载等)是否会带来默认的缓存策略?

创建CDN加速域名时选择的业务类型(如图片小文件、大文件下载等)对默认缓存策略影响不大,CDN并未针对特定后缀或路径预设固定的缓存天数。

实际的缓存行为以控制台配置为准。建议在域名创建后,前往配置 CDN 缓存过期时间根据资源类型与更新频率自行配置缓存规则。

节点HTTP响应头和回源HTTP响应头有什么区别?或者说出站响应头和入站响应头有什么区别?

节点HTTP响应头和回源HTTP响应头在缓存架构中代表不同环节的HTTP头部信息。

  • 节点HTTP响应头(出站响应头):由CDN节点发送给客户端(如浏览器)的HTTP响应头。当CDN节点有缓存内容时,会直接返回给客户端,无需向源站请求。

  • 回源HTTP响应头(入站响应头):由源站发送给CDN节点的HTTP响应头。当CDN节点的缓存过期或未命中时,CDN点会向源站请求最新内容,源站返回的内容及相关HTTP头部信息就是回源响应头。

因此,节点HTTP响应头和回源HTTP响应头的区别在于它们的应用场景和控制对象不同。节点HTTP响应头用于控制客户端和CDN节点的缓存行为,而回源HTTP响应头用于控制源站与CDN节点之间的缓存行为。它们通常共同使用,以实现高效、精确的缓存控制。关于回源HTTP响应头的更多信息,请参见修改入站响应头

异常状态码(404、502等)的缓存规则是什么?

  • 对于204、305、404、405、414、424、429、500、501、502、503和504状态码,缓存规则如下:

    image
    1. 如果源站返回set-cookie响应头,CDN不缓存。

    2. 如果源站没有返回Set-Cookie响应头,则遵循CDN控制台配置的状态码过期时间来缓存,配置多条规则时生效方式请参考多条规则生效优先级说明。

    3. 如果源站没有返回Set-Cookie响应头,CDN控制台也没有配置状态码过期时间,则按照源站设置的Pragma、Cache-Control或者Expires响应头来缓存。

    4. 如果源站没有返回Set-Cookie、Pragma、Cache-Control或者Expires响应头,CDN控制台也没有配置状态码过期时间,则默认缓存1秒。

  • 对于302、307和403状态码,缓存规则如下:

    image
    1. 如果源站返回set-cookie响应头,CDN不缓存。

    2. 如果源站没有返回Set-Cookie响应头,则遵循CDN控制台配置的状态码过期时间来缓存,配置多条规则时生效方式请参考多条规则生效优先级说明。

    3. 如果源站没有返回Set-Cookie响应头,CDN控制台也没有配置状态码过期时间,则按照源站设置的Pragma、Cache-Control或者Expires响应头来缓存。

    4. 如果源站没有返回Set-Cookie、Pragma、Cache-Control或者Expires响应头,CDN控制台也没有配置状态码过期时间,不缓存。

  • 针对304状态码,CDN将不进行缓存,且无法通过任何方式设置缓存时间。

CDN是否支持多副本缓存?如何实现CDN的多副本缓存?

CDN支持默认多副本缓存。此时源站需要携带Vary头来告知CDN节点需要用哪个请求头的值来做多副本。

以压缩为例,当客户端发送 Accept-Encoding: gzip 时,源站会返回经过 gzip 压缩的内容;而如果客户端发送的是 Accept-Encoding: br,源站则返回使用 Brotli 压缩的内容。为了缓存这些不同版本的响应,就需要源站在响应中添加 Vary 头,明确告知缓存系统根据哪个请求头来区分不同的副本。在本例中,源站应设置 Vary: Accept-Encoding,表明需要根据 Accept-Encoding 的值来存储和提供不同的缓存副本。

缓存配置

如何设置缓存全局生效?

您可以通过设置缓存过期时间来实现缓存全局生效。设置时,类型选择目录后,在地址栏用正斜线(/)匹配所有目录。具体操作请参见配置CDN缓存过期时间

如何配置整个域名不缓存?

为了配置阿里云CDN整个域名不缓存,您可以通过设置全路径缓存过期时间为0来实现,并确保该规则权重最高。以下是具体步骤:

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击缓存配置

  5. 缓存过期时间页签下,单击添加

    • 类型:选择目录

    • 地址:填写/,表示全部路径。

    • 过期时间:填写0秒

    • 其他参数保持默认选项。

  6. 单击确定,完成配置。

说明

若阿里云CDN请求同时命中多条规则,有且仅有一条规则会生效,优先级为:权重>规则创建时间。

如果缓存过期时间中有多条规则,请保证全域名不缓存规则的权重最高(此时优先级最高)。

如何配置CDN仅缓存静态文件(如图片、CSS、JS),而让动态页面直接回源?

建议采用"黑白名单"结合权重的配置方式:

  1. 创建高权重静态缓存规则:添加一条或多条规则,类型选择"文件后缀名",地址填写 jpg,png,css,js 等静态后缀,设置较长的缓存时间(如1个月),权重设为较高值(如90~99)。

  2. 创建低权重动态不缓存规则:添加一条规则,类型选择"目录",地址填写 /(根目录),缓存时间设为 0 秒(不缓存),权重设为较低值(如1~10)。

  3. 针对特定动态路径优化:若某些动态路径(如 /api/ 或 /wp-admin/)需要严格不缓存,可单独添加目录规则,路径设为该目录,缓存时间 0 秒,权重设为最高(如99),确保优先匹配。

注意:CDN无法完全绕过节点直接回源,即使缓存时间为 0,请求仍会经过CDN节点进行转发和鉴权。

动态资源、接口或特定目录如何配置不缓存(透传回源)?

针对不同的动态内容场景,可以通过配置缓存过期时间为 0 秒来实现透传回源:

  • 动态页面和接口不缓存:对于 PHP、ASPX、API 接口、实时通讯(长连接)、后台上传接口等动态内容,添加一条文件后缀名规则,输入对应后缀(如php,aspx,jsp),将过期时间设置为 0 秒。这样可确保每次请求实时回源,避免因缓存动态内容导致验证码失效、登录状态异常或图片上传失败等业务问题。

  • 指定目录不缓存:若需对特定目录(如/api//wp-admin/)实现类似"关闭加速"的效果,添加一条目录规则,填写目标目录路径,将过期时间设置为 0 秒。CDN 不支持直接关闭某个目录的加速,但通过此方式可实现请求透传回源。

  • 根目录与子目录优先级配置:若希望仅缓存特定子目录(如/static/)而根目录/下的其他资源不缓存,需分别配置两条规则。将子目录/static/权重设为较高值(如 99),将根目录/的缓存过期时间设为 0 秒且权重设为较低值(如 1)。如果全站缓存导致动态接口异常,建议删除全站缓存规则,改为按文件后缀名或具体静态目录分别配置。

  • SPA/HTML 页面缓存异常:若 SPA(单页应用)页面出现 404 或登录跳转异常,检查是否对.htmlindex.html配置了缓存。建议对 HTML 文件设置不缓存(过期时间为 0 秒),或在源站响应头中去除Cache-Control,然后执行刷新缓存操作。

说明

即使缓存过期时间设为 0 秒,请求仍会经过 CDN 节点进行转发和安全校验,无法完全绕过 CDN。更多关于文件不缓存的场景说明,请参见缓存相关常见问题

将缓存规则中的文件后缀设为 .aspx 是否会导致整站不缓存?

如果您的网站全部页面都是.aspx结尾,将.aspx后缀的缓存过期时间设为 0,会导致整站不缓存。

建议避免使用泛后缀对整站生效。请针对具体文件路径或目录配置缓存规则,例如对/static/目录设置较长缓存时间,对/api.aspx这类动态接口单独设置 0 秒不缓存。

如何为 robots.txt 和 sitemap.xml 配置缓存时长?

这两类文件直接影响搜索引擎抓取,需要根据更新频率单独配置缓存时长,避免命中默认规则后过长缓存导致更新延迟:

类型

推荐配置

说明

文件后缀名

txt,xml

在控制台「缓存过期时间」添加规则,类型选「文件后缀名」,过期时间根据更新频率设置(建议 1 小时~1 天)

目录或文件路径

/robots.txt/sitemap.xml

若只针对这两个文件,类型选「目录」,地址填具体文件路径,权重设高以覆盖泛后缀规则

若网站会频繁更新 sitemap,建议缓存时长不超过 1 小时;若 robots 规则稳定,可设置较长缓存。

「客户端跟随缓存策略」开关应该开启还是关闭?

该开关控制CDN是否将自身的缓存策略(如max-age=3600)通过响应头传递给客户端浏览器:

  • 关闭(默认)CDN节点仍按自身规则缓存资源,但不会在响应头中告知浏览器。此时浏览器的缓存行为完全由您在「修改出站响应头」中手动配置的字段决定。

  • 开启CDNCache-Control等头部一并下发给浏览器,使浏览器与CDN节点采用相同的缓存策略。

建议若已在「修改出站响应头」中针对客户端配置了所需响应头,且与预期一致,保持默认关闭即可。若希望浏览器复用CDN的策略以减少二次加载请求,可开启。

CDN如何缓存大文件?

CDN支持大文件下载场景的缓存,可通过配置缓存过期时间规则让CDN节点长期缓存该类文件,提升命中率并降低回源成本。

配置建议:

  • 缓存时长:不常更新的大文件建议设置 ≥1 个月的缓存过期时间。

  • 源站不缓存指令:确保源站未返回Cache-Control: no-cacheno-storemax-age=0等指令。若源站不可控,可在缓存规则中勾选「忽略源站不缓存标头」。

  • 大文件预热:首次访问大文件时延迟较高,建议在分发前通过刷新和预热资源提交预热任务,将文件提前推送至CDN节点。

CDN如何配置子目录访问首页?

通过访问子目录名来返回默认的子目录首页是站点常见的操作之一,在CDN上也可以实现这个能力,减少源站改动。

例如,首页文件是https://www.example.com/cdn/index.html,该方案可以实现访问https://www.example.com/cdnhttps://www.example.com/cdn/子目录也可以返回首页文件。

确认源站

先确认源站的子目录首页具体文件可以访问,例如https://www.example.com/cdn/index.html可以正常访问到。

配置子目录重写

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击缓存配置

  5. 单击重写访问URL页签。

  6. 单击添加,根据您的实际需求,配置访问URL重写参数。

    配置两条规则,分别针对结尾是/和结尾不是/的进行匹配:

    • 规则1:待重写的Path:^/(.+)/$;目标Path:/$1/index.html;执行规则:Break

    • 规则2:待重写的Path:^/([^.?#]+)$;目标Path:/$1/index.html;执行规则:Break

    image

通过HTTP响应头配置CDN跨域资源共享(CORS)及注意事项

设置适当的HTTP响应头,允许来自不同源的请求访问资源,详情请参见配置跨域资源共享

验证缓存效果

如何判断CDN缓存是否成功?

阿里云CDN对于文件是否支持缓存,您可以通过检查HTTP响应头中的相关字段来判断。

  1. X-Cache: 表示请求是否命中CDN缓存。值为HIT表示命中,MISS或者字段不存在表示未命中。

  2. Age: 表示文件在CDN节点上缓存的时间(秒)。文件被刷新或首次访问无此字段。Age为0表示缓存过期,需回源校验。

  3. X-Swift-CacheTime: 表示文件在CDN节点上的允许缓存时间。计算剩余缓存时间:X-Swift-CacheTime Age

  4. X-Swift-SaveTime:表示资源首次被缓存到CDN节点上的时间(GMT)。转换为中国北京时间需加上8小时。

为了查看这些HTTP响应头,您可以通过以下两种方式查看您的内容是否缓存到CDN

方式1:使用浏览器的开发者工具(如Chrome的开发者工具)

在浏览器开发者工具的 Network 面板中查看 Response Headers,重点关注与 CDN 缓存相关的响应头字段 AgeX-CacheX-Swift-CachetimeX-Swift-Savetime

Response Headers
Access-Control-Allow-Origin:    *
Age:    860
Ali-Swift-Global-Savetime:    1704259214
Cache-Control:    max-age=28800,s-maxage=3600
Content-Encoding:    gzip
Content-Length:    2618
Content-Md5:    /h0oxujZUUo1P8gMA893oQ==
Content-Type:    text/html
Date:    Wed, 03 Jan 2024 05:20:14 GMT
Eagleid:    db9062a517042600741495981e
Server:    Tengine
Timing-Allow-Origin:    *
Vary:    Accept-Encoding
Via:    cache49.l2cn3032[0,0,200-0,H], cache8.l2cn3032[3,0], cache8.l2cn3032[3,0], ens-cache16.cn3573[0,0,200-0,H], ens-cache17.cn3573[43,0]
X-Cache:    HIT TCP_MEM_HIT dirn:10:498457979
X-Oss-Hash-Crc64ecma:    1068125902847643907
X-Oss-Object-Type:    Normal
X-Oss-Request-Id:    6594EE8E1FC2C239355F41E1
X-Oss-Server-Time:    3
X-Oss-Storage-Class:    Standard
X-Source-Scheme:    https
X-Swift-Cachetime:    3600
X-Swift-Savetime:    Wed, 03 Jan 2024 05:20:14 GMT
X-Swift-Savetime:    Wed, 03 Jan 2024 05:20:14 GMT

方式2:使用curl命令查看资源缓存情况

curl "http://example.com/path/to/response.html" -v
F:\test>curl http://cdn.xxx.top/pic_03.jpg -v
* Host cdn.xxx.top:80 was resolved.
* IPv6: (none)
* IPv4: 1xxx
*   Trying 1xxx:80...
* Connected to cdn.xxx.top (xxx) part 80
> GET /pic_03.jpg HTTP/1.1
> Host: cdn.xxx.top
> User-Agent: curl/8.9.1
> Accept: */*
>
* Request completely sent off
&lt; HTTP/1.1 200 OK
&lt; Server: Tengine
&lt; Content-Type: image/jpeg
&lt; Content-Length: 8775526
&lt; Connection: keep-alive
&lt; Date: Mon, 26 May 2025 02:21:59 GMT
&lt; x-oss-request-id: 68xxx9A
&lt; x-oss-cdn-auth: success
&lt; Accept-Ranges: bytes
&lt; ETag: &quot;Bxxx2&quot;
&lt; Last-Modified: Tue, 03 Sep 2024 06:20:19 GMT
&lt; x-oss-object-type: Normal
&lt; x-oss-storage-class: Standard
&lt; Via: cache20.l2cn3032[0,0,200-0,H], cache10.cn3573[0,0,200-0,H], cache10.cn3573[1,0]
&lt; Age: 424
&lt; X-Cache: HIT TCP_HIT dirn:0:698837654
&lt; X-Swift-CacheTime: 2592000
&lt; Timing-Allow-Origin: *
&lt; EagleId: 08xxx51
&lt;
* Connection #0 to host cdn.xxx.top left intact

&lt; x-oss-hash-crc64ecma: 12xxx58 &lt; x-oss-storage-class: Standard &lt; x-oss-server-time: 228 &lt; Via: ens-cache3.12cn7857[1863,1862,206-0,M], ens-cache38.12cn7857[1863,0], ens-cache20.cn6692[0,0,200-0,H], ens-cache4.cn6692[14,0] &lt; Age: 424 &lt; Ali-Swift-Global-Savetime: 1748226119 &lt; X-Cache: HIT TCP_HIT dirn:7:286737139 mlen:0 &lt; X-Swift-SaveTime: Mon, 26 May 2025 02:21:59 GMT &lt; X-Swift-CacheTime: 2592000 &lt; Timing-Allow-Origin: * &lt; EagleId: 7xxx220e

响应头中 <code data-tag="code">X-Cache: HIT TCP_HIT 表明该资源已被 CDN 缓存命中,Age: 424 表示资源在缓存中已存储 424 秒,X-Swift-CacheTime: 2592000 表示缓存有效期为 2592000 秒(30 天)。

配置缓存规则后,为什么测试请求仍然回源或未命中缓存?

可按以下步骤排查:

  1. 检查配置生效状态:确认控制台缓存配置状态显示为"成功"。

  2. 验证匹配优先级:若存在多条规则,确保目标路径命中的规则权重最高。例如,具体目录(如 /static/)的权重应高于根目录(/)的默认规则。

  3. 检查源站响应头:若源站返回 Cache-Control: no-cache/no-store/max-age=0 或 Pragma: no-cache,且CDN未开启"忽略源站不缓存标头",CDN将遵循源站指令不缓存。建议开启该选项或调整源站配置。

  4. 确认请求方法:使用 curl -voa(GET请求)而非 curl -I(HEAD请求)进行测试,因为HEAD请求可能不会触发L1节点对资源体的真实缓存逻辑,导致误判为MISS。

  5. 检查URL参数:若URL带参数,确认是否开启了"忽略URL参数"功能。若未开启,不同参数的URL被视为不同资源;若开启,则视为同一资源。

修改缓存规则后,状态显示"配置中",是否正常?是否影响业务?

  • 配置状态说明:新增或修改缓存规则后,规则状态显示"配置中"是正常现象,表示配置正在下发到全网 CDN 节点。通常几分钟内会自动变为"成功"。如果长时间未变化,可尝试刷新页面查看最新状态。

  • 业务影响:修改缓存规则不会影响现有业务的可用性。新规则仅对新请求生效,已经缓存在 CDN 节点上的资源仍按照旧策略提供服务,直至缓存过期。如果需要新规则立即对所有请求生效,请执行刷新缓存操作清除旧缓存。

缓存刷新

源站变更文件后,CDN节点上的缓存会主动、实时更新吗?

源站变更文件后,CDN节点上的缓存不会主动、实时更新。缓存更新取决于配置的缓存策略。

  • CDN节点根据配置的缓存过期时间更新缓存。如果缓存未过期,源站变更文件不会立即反映在CDN缓存中,详情请参见配置CDN缓存过期时间

  • 您可以通过CDN提供的刷新缓存手动清除缓存,使下一次请求回源获取最新的内容。

配置 Cache-Control: no-cache 后能否保证用户不清理浏览器缓存即可刷新访问最新文件?

不能保证。Cache-Control: no-cache仅让客户端在每次请求时向CDN发起协商缓存请求,若CDN节点上仍缓存有旧文件且未过期,CDN可能直接返回缓存内容或需回源验证。若源站文件已更新但CDN未刷新,用户仍可能看到旧文件。

建议在源站更新文件后,通过CDN控制台执行刷新或预热操作(详情请参见刷新和预热资源),强制CDN节点回源获取最新资源,从而确保用户访问到最新文件。

如何实现分钟级或近实时更新CDN缓存?

通过以下步骤实现分钟级更新:

  1. CDN控制台为目标文件配置缓存过期时间(如 60 秒)。

  2. 开启「强制内容重新验证」开关。

  3. 关闭「优先遵循源站缓存策略」开关。

如果之前配置了较长的缓存时间,需要先通过刷新和预热资源清除旧缓存,新配置才能立即生效。

若需毫秒级实时性,建议在源站使用版本化文件名(如style-a1b2c3d.css)替代缓存策略调整,详情请参见配置 CDN 缓存过期时间

缓存不更新时是否需要修改过期时间?

不需要修改过期时间。只需以下两步即可让单次更新立即生效:

  1. 开启「强制内容重新验证」开关,关闭「优先遵循源站缓存策略」开关。

  2. 刷新和预热资源中提交对应文件的刷新任务。

此操作仅清除已缓存的旧内容,下一次请求会回源获取最新资源,不影响后续访问的缓存命中率。

排查异常问题

在控制台缓存过期时间设置为0,为何访问到的资源仍然不是最新内容?

CDN控制台将缓存过期时间设置为0,目的是每次请求都直接回源站获取最新内容。然而,如果您发现访问到的资源仍然不是最新的内容,可能有几个原因:

  1. 浏览器本地缓存:浏览器可能缓存了旧内容。建议清除浏览器缓存或使用无痕模式测试。

  2. 配置生效延迟:设置缓存时间为0后,可能需要时间让所有CDN节点生效。另外,如果CDN节点未检测到更改,可能仍返回旧缓存。

  3. 源站缓存未刷新:源站服务器可能有缓存机制,未及时更新时,CDN节点回源可能获取旧缓存。

  4. 节点缓存清除延迟:修改配置前已缓存的资源可能需要时间清除。您可以手动刷新缓存,确保立即获取最新内容,详情请参见刷新和预热资源

缓存配置为什么没有生效?

如果您配置了缓存规则,在使用过程中发现此缓存规则未生效,可能是以下原因:

  1. 生效延迟:缓存规则的修改或新增通常需要一段时间才能生效,请您在规则生效后再验证。

  2. 缓存更新机制:新规则不会立即应用到已缓存的内容,需要等到原缓存过期后才会生效。

  3. 缓存刷新操作未执行:更改缓存设置后,如果没有手动刷新缓存,旧的缓存内容将继续被提供给用户,直到自然过期。详情请参见刷新和预热资源

  4. 缓存响应头设置不当:检查源站发送的HTTP响应头里的Cache-ControlExpires标头是否正确设置。

  5. 缓存规则有优先级:若CDN请求同时命中多条规则,优先级为:权重>规则创建时间。

    • 有多条缓存规则的情况下,建议每条缓存规则都设置不同的权重(权重越大优先级越高),通过权重来控制规则执行优先级。

    • 权重相同的规则生效优先级:先创建的>后创建的,与规则类型无关。

    配置示例:为加速域名demo.aliyun.com配置以下缓存策略,CDN节点回源下载资源http://demo.aliyun.com/image/example.png,虽然以下两条规则都匹配到了,但是因为这两条规则的权重相同,因此要判断规则创建的时间,先创建的规则优先级高于后创建的,因为目录/image这条规则创建的时间更早,所以系统最终生效的是目录类型这条规则。缓存规则配置列表展示两条规则: - 地址为jpg,png,类型为文件后缀名,过期时间1个月,权重10,状态为成功。 - 地址为/image,类型为目录,过期时间1天,权重10,状态为配置中。 两条规则的遵循源站缓存策略忽略源站不缓存标头客户端跟随CDN缓存策略强制内容重新验证均为关闭。每条规则支持修改删除操作。

为什么已经配置了响应头Access-Control-Allow-Origin,但是访问资源仍提示跨域问题,response header中没有配置的响应头?

如果您在阿里云CDN中配置了Access-Control-Allow-Origin等回源响应头,但客户端仍遇到跨域问题且响应头中没有这些配置,可能原因如下:

可能的原因

  1. 配置未生效或错误:配置未正确设置或尚未生效

  2. CDN缓存:CDN节点缓存了旧的响应头。

  3. 源站问题:源站的跨域响应头与CDN配置冲突。

  4. 浏览器缓存:浏览器缓存了旧的响应。

解决方案

  1. 验证配置:确认CDN配置已正确设置并生效。

  2. 清除CDN缓存:使用CDN的刷新功能清空缓存,然后再次访问资源。具体请参见刷新和预热资源

  3. 检查源站设置:确认源站不会返回与CDN配置冲突的跨域响应头。建议统一源站和CDN的跨域头设置。

  4. 清除浏览器缓存:清空浏览器缓存,或使用无痕模式测试。

视频播放出现 ERR_CONTENT_LENGTH_MISMATCH 错误,如何排查?

  • 错误原因:该错误通常是因为 CDN 节点上缓存的文件长度与源站实际内容不一致,或源站返回了异常的Content-Length响应头。常见于源站更新了视频文件内容但 CDN 仍返回旧版本缓存。

  • 解决方法

    1. 在 CDN 控制台的刷新预热页面,提交视频 URL 的刷新请求,清除 CDN 节点上的旧缓存。

    2. 如果源站为 OSS(对象存储),可开启 CDN 缓存自动刷新功能,使源站文件更新后自动触发 CDN 缓存刷新。

    3. 检查源站的稳定性和响应一致性,确保源站不会间歇性返回异常Content-Length

  • 206 状态码说明:视频播放器通常使用 Range 请求分段加载视频内容,CDN 返回206 Partial Content状态码属于正常行为。即使命中 CDN 缓存,返回的也是 206 状态码,不属于错误。

静态文件已命中CDN缓存,但首页仍然加载很慢?

静态资源(图片、CSS、JS 等)已命中缓存并正常加速,但首页(根路径 /)加载仍需数秒,通常是因为首页请求未配置缓存规则,每次访问都需要回源获取数据,加载速度取决于源站处理耗时。

解决方案:为加速域名添加根目录的缓存过期时间规则,使首页内容被CDN节点缓存,减少回源次数。

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击缓存配置

  5. 缓存过期时间页签下,单击添加

    • 类型:选择目录

    • 地址:填写/

    • 过期时间:根据首页内容的更新频率设置,例如 30 秒至数分钟。

    • 权重:若已有其他缓存规则,将此规则的权重设为较低值(如 1),避免覆盖静态资源的缓存规则。

  6. 单击确定,完成配置。

配置生效后,首页内容将被CDN节点缓存,后续访问直接从节点返回,不再每次回源,首页加载速度将显著提升。更多关于缓存过期时间的配置说明,请参见配置 CDN 缓存过期时间

优化缓存命中率

如何解决URL的传递参数为变量导致CDN缓存命中率低的问题?

可能是因为没有开启CDN的忽略参数功能,详情请参见URL的传递参数为变量导致CDN缓存命中率低

影响CDN缓存命中率下降的因素有哪些?

影响阿里云CDN缓存命中率下降的因素如下:

  1. 刷新缓存:手动或自动刷新缓存操作可能导致短时间内命中率下降。

  2. 带宽突增:当带宽在短时间内大幅度增加时,会导致CDN节点回源请求增多,从而降低缓存命中率。

  3. CDN节点访问新内容:如果CDN节点频繁访问首次请求的新内容,也会导致回源较多,进而表现出缓存命中率的下降趋势。

  4. 缓存规则调整:对CDN缓存策略进行修改或调整可能会影响缓存命中率,例如未配置合适的缓存过期时间或者缓存策略设置不当。

  5. URL中带有可变参数:URL中问号(?)后的参数变化会导致不同的URL请求被视为不同的资源,即使实际指向的是同一份内容,这也会造成CDN缓存命中率降低。

  6. 未合理配置缓存过期时间:对于不同更新频率的静态文件,如未根据实际情况设置合理的缓存过期时间,可能会导致缓存资源过早失效,从而影响缓存命中率。

更多场景关于影响缓存命中率的因素介绍请参见提高CDN缓存命中率。具体可参见刷新和预热资源忽略参数配置CDN缓存过期时间

怎么排查缓存命中率低、回源率高或源站带宽跑满?

  • 检查源站缓存响应头:如果源站返回Cache-Control: no-cacheCache-Control: no-storeCache-Control: max-age=0Pragma: no-cache,CDN 默认遵循源站指令不缓存该资源,导致每次请求均回源。这是命中率低和源站带宽跑满最常见的原因。

  • 开启忽略源站不缓存标头:在 CDN 控制台的缓存过期时间配置中,勾选该选项。开启后,CDN 将忽略源站返回的Cache-Control: no-cacheno-storemax-age=0以及Pragma: no-cache等不缓存指令,强制按控制台配置的规则进行缓存。

  • 检查缓存规则配置:确认是否误将根目录/的缓存过期时间配置为 0 秒。如果根目录规则权重最高且过期时间为 0,则所有请求都会回源。

  • 大文件场景优化:对于视频等大文件,确保已开启 Range 回源功能,避免每次请求都回源获取完整文件。

  • 区分动静资源:为静态资源(图片、CSS、JS 等)设置较长的缓存时间(如 1 个月),为动态内容(如 PHP、JSP)设置过期时间为 0 秒(不缓存)。

说明

更详细的缓存命中率排查方法,请参见CDN 缓存命中率较低排查方法

为什么视频播放或大文件下载时,日志中显示大量 206 状态码或多次回源?

这是正常现象。

  1. 206状态码:视频播放器或下载工具通常使用Range请求分段加载资源,每次请求部分内容,服务器返回 206 Partial Content。CDN命中缓存时也会返回 206。

  2. 流量费用:只要客户端向CDN发起请求并接收数据,无论是否命中缓存,均会计入CDN流出流量费用。

  3. 优化建议:确保开启CDN的Range回源功能,以便CDN节点可以按需从源站拉取片段并缓存,提高后续分段请求的命中率。同时,建议在客户端或源站配置合理的 Cache-Control 头,利用浏览器本地缓存减少重复请求。

其他缓存相关常见问题,请参见缓存相关常见问题