本文为您介绍CDN缓存相关的常见问题。
了解基础概念
CDN缓存清理机制是什么?
缓存在CDN节点上的资源,如果该资源的访问热度较低(同一个CDN节点上的同一个资源被客户端访问的频次较低),那么很可能会在缓存过期之前被CDN节点上其他访问热度较高的资源覆盖。
CDN默认的缓存规则是什么?
CDN节点在收到源站响应的文件资源的时候,会按照以下的缓存规则来执行(数值越小,优先级越高):

源站响应
pragma:no-cache、cache-control:no-cache(或者no-store,或者max-age=0)时,CDN遵循源站的策略,完全不缓存资源。CDN控制台设置的缓存过期时间或者状态码过期时间。
说明若CDN请求同时命中多条规则,有且仅有一条规则会生效,优先级为:权重>规则创建时间。
有多条缓存规则的情况下,建议每条缓存规则都设置不同的权重(权重越大优先级越高),通过权重来控制规则执行优先级。
权重相同的规则生效优先级:先创建的>后创建的,与规则类型无关。
源站配置其他缓存规则,优先级由高至低为:
cache-control>expires>last-modified>ETag。如果源站响应中携带了
cache-control,参数值包含max-age或s-maxage,并且max-age或s-maxage的值大于0,则使用cache-control设置缓存过期时间,例如:cache-control:max-age=3600。如果同时存在max-age和s-maxage,则以s-maxage的值为准。如果源站响应中没有携带
cache-control,但是携带了Expires,则使用Expires设置缓存过期时间,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT。如果源站响应中没有携带
cache-control和Expires,但是携带了last-modified,则使用以下规则来计算缓存时间:使用公式(当前时间-last-modified)* 0.1,计算结果在10秒~3600秒及之间的,取计算结果时间;小于10秒的,按照10秒处理;大于3600秒的,按照3600秒处理。如果源站响应中没有携带
cache-control、Expires和last-modified,但是携带了ETag,缓存10秒。
如果源站返回的数据中,
cache-control、expires、last-modified和ETag这些缓存策略相关的响应头都没有携带,则默认不缓存。
缓存策略中「源站响应 Cache-Control」的「源站」指什么?是指 OSS 配置还是 HTML 代码中的 <meta> 标签?
「源站」指 OSS、ECS 等后端存储或应用服务器返回的 HTTP 响应头,而非 HTML 代码中的<meta>标签。
CDN在判断缓存策略时,只读取源站在 HTTP 响应头中返回的Cache-Control、Expires等字段;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状态码,缓存规则如下:
如果源站返回
set-cookie响应头,CDN不缓存。如果源站没有返回Set-Cookie响应头,则遵循CDN控制台配置的状态码过期时间来缓存,配置多条规则时生效方式请参考多条规则生效优先级说明。
如果源站没有返回Set-Cookie响应头,CDN控制台也没有配置状态码过期时间,则按照源站设置的Pragma、Cache-Control或者Expires响应头来缓存。
如果源站没有返回Set-Cookie、Pragma、Cache-Control或者Expires响应头,CDN控制台也没有配置状态码过期时间,则默认缓存1秒。
对于302、307和403状态码,缓存规则如下:
如果源站返回
set-cookie响应头,CDN不缓存。如果源站没有返回Set-Cookie响应头,则遵循CDN控制台配置的状态码过期时间来缓存,配置多条规则时生效方式请参考多条规则生效优先级说明。
如果源站没有返回Set-Cookie响应头,CDN控制台也没有配置状态码过期时间,则按照源站设置的Pragma、Cache-Control或者Expires响应头来缓存。
如果源站没有返回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来实现,并确保该规则权重最高。以下是具体步骤:
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击缓存配置。
在缓存过期时间页签下,单击添加。
类型:选择目录。
地址:填写
/,表示全部路径。过期时间:填写
0秒。其他参数保持默认选项。
单击确定,完成配置。
若阿里云CDN请求同时命中多条规则,有且仅有一条规则会生效,优先级为:权重>规则创建时间。
如果缓存过期时间中有多条规则,请保证全域名不缓存规则的权重最高(此时优先级最高)。
如何配置CDN仅缓存静态文件(如图片、CSS、JS),而让动态页面直接回源?
建议采用"黑白名单"结合权重的配置方式:
创建高权重静态缓存规则:添加一条或多条规则,类型选择"文件后缀名",地址填写
jpg,png,css,js等静态后缀,设置较长的缓存时间(如1个月),权重设为较高值(如90~99)。创建低权重动态不缓存规则:添加一条规则,类型选择"目录",地址填写
/(根目录),缓存时间设为 0 秒(不缓存),权重设为较低值(如1~10)。针对特定动态路径优化:若某些动态路径(如
/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 或登录跳转异常,检查是否对
.html或index.html配置了缓存。建议对 HTML 文件设置不缓存(过期时间为 0 秒),或在源站响应头中去除Cache-Control,然后执行刷新缓存操作。
即使缓存过期时间设为 0 秒,请求仍会经过 CDN 节点进行转发和安全校验,无法完全绕过 CDN。更多关于文件不缓存的场景说明,请参见缓存相关常见问题。
将缓存规则中的文件后缀设为 .aspx 是否会导致整站不缓存?
如果您的网站全部页面都是.aspx结尾,将.aspx后缀的缓存过期时间设为 0,会导致整站不缓存。
建议避免使用泛后缀对整站生效。请针对具体文件路径或目录配置缓存规则,例如对/static/目录设置较长缓存时间,对/api.aspx这类动态接口单独设置 0 秒不缓存。
如何为 robots.txt 和 sitemap.xml 配置缓存时长?
这两类文件直接影响搜索引擎抓取,需要根据更新频率单独配置缓存时长,避免命中默认规则后过长缓存导致更新延迟:
类型 | 推荐配置 | 说明 |
文件后缀名 |
| 在控制台「缓存过期时间」添加规则,类型选「文件后缀名」,过期时间根据更新频率设置(建议 1 小时~1 天) |
目录或文件路径 |
| 若只针对这两个文件,类型选「目录」,地址填具体文件路径,权重设高以覆盖泛后缀规则 |
若网站会频繁更新 sitemap,建议缓存时长不超过 1 小时;若 robots 规则稳定,可设置较长缓存。
「客户端跟随缓存策略」开关应该开启还是关闭?
该开关控制CDN是否将自身的缓存策略(如max-age=3600)通过响应头传递给客户端浏览器:
关闭(默认):CDN节点仍按自身规则缓存资源,但不会在响应头中告知浏览器。此时浏览器的缓存行为完全由您在「修改出站响应头」中手动配置的字段决定。
开启:CDN将
Cache-Control等头部一并下发给浏览器,使浏览器与CDN节点采用相同的缓存策略。
建议若已在「修改出站响应头」中针对客户端配置了所需响应头,且与预期一致,保持默认关闭即可。若希望浏览器复用CDN的策略以减少二次加载请求,可开启。
CDN如何缓存大文件?
CDN支持大文件下载场景的缓存,可通过配置缓存过期时间规则让CDN节点长期缓存该类文件,提升命中率并降低回源成本。
配置建议:
缓存时长:不常更新的大文件建议设置 ≥1 个月的缓存过期时间。
源站不缓存指令:确保源站未返回
Cache-Control: no-cache、no-store、max-age=0等指令。若源站不可控,可在缓存规则中勾选「忽略源站不缓存标头」。大文件预热:首次访问大文件时延迟较高,建议在分发前通过刷新和预热资源提交预热任务,将文件提前推送至CDN节点。
CDN如何配置子目录访问首页?
通过访问子目录名来返回默认的子目录首页是站点常见的操作之一,在CDN上也可以实现这个能力,减少源站改动。
例如,首页文件是https://www.example.com/cdn/index.html,该方案可以实现访问https://www.example.com/cdn、https://www.example.com/cdn/子目录也可以返回首页文件。
确认源站
先确认源站的子目录首页具体文件可以访问,例如https://www.example.com/cdn/index.html可以正常访问到。
配置子目录重写
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击缓存配置。
单击重写访问URL页签。
单击添加,根据您的实际需求,配置访问URL重写参数。
配置两条规则,分别针对结尾是
/和结尾不是/的进行匹配:规则1:待重写的Path:
^/(.+)/$;目标Path:/$1/index.html;执行规则:Break。规则2:待重写的Path:
^/([^.?#]+)$;目标Path:/$1/index.html;执行规则:Break。

通过HTTP响应头配置CDN跨域资源共享(CORS)及注意事项
设置适当的HTTP响应头,允许来自不同源的请求访问资源,详情请参见配置跨域资源共享。
验证缓存效果
如何判断CDN缓存是否成功?
阿里云CDN对于文件是否支持缓存,您可以通过检查HTTP响应头中的相关字段来判断。
X-Cache: 表示请求是否命中CDN缓存。值为HIT表示命中,MISS或者字段不存在表示未命中。Age: 表示文件在CDN节点上缓存的时间(秒)。文件被刷新或首次访问无此字段。Age为0表示缓存过期,需回源校验。X-Swift-CacheTime: 表示文件在CDN节点上的允许缓存时间。计算剩余缓存时间:X-Swift-CacheTime–Age。X-Swift-SaveTime:表示资源首次被缓存到CDN节点上的时间(GMT)。转换为中国北京时间需加上8小时。
为了查看这些HTTP响应头,您可以通过以下两种方式查看您的内容是否缓存到CDN:
方式1:使用浏览器的开发者工具(如Chrome的开发者工具)
在浏览器开发者工具的 Network 面板中查看 Response Headers,重点关注与 CDN 缓存相关的响应头字段 Age、X-Cache、X-Swift-Cachetime 和 X-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" -vF:\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
< HTTP/1.1 200 OK
< Server: Tengine
< Content-Type: image/jpeg
< Content-Length: 8775526
< Connection: keep-alive
< Date: Mon, 26 May 2025 02:21:59 GMT
< x-oss-request-id: 68xxx9A
< x-oss-cdn-auth: success
< Accept-Ranges: bytes
< ETag: "Bxxx2"
< Last-Modified: Tue, 03 Sep 2024 06:20:19 GMT
< x-oss-object-type: Normal
< x-oss-storage-class: Standard
< Via: cache20.l2cn3032[0,0,200-0,H], cache10.cn3573[0,0,200-0,H], cache10.cn3573[1,0]
< Age: 424
< X-Cache: HIT TCP_HIT dirn:0:698837654
< X-Swift-CacheTime: 2592000
< Timing-Allow-Origin: *
< EagleId: 08xxx51
<
* Connection #0 to host cdn.xxx.top left intact< x-oss-hash-crc64ecma: 12xxx58 < x-oss-storage-class: Standard < x-oss-server-time: 228 < 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] < Age: 424 < Ali-Swift-Global-Savetime: 1748226119 < X-Cache: HIT TCP_HIT dirn:7:286737139 mlen:0 < X-Swift-SaveTime: Mon, 26 May 2025 02:21:59 GMT < X-Swift-CacheTime: 2592000 < Timing-Allow-Origin: * < EagleId: 7xxx220e
响应头中 <code data-tag="code">X-Cache: HIT TCP_HIT 表明该资源已被 CDN 缓存命中,Age: 424 表示资源在缓存中已存储 424 秒,X-Swift-CacheTime: 2592000 表示缓存有效期为 2592000 秒(30 天)。
配置缓存规则后,为什么测试请求仍然回源或未命中缓存?
可按以下步骤排查:
检查配置生效状态:确认控制台缓存配置状态显示为"成功"。
验证匹配优先级:若存在多条规则,确保目标路径命中的规则权重最高。例如,具体目录(如
/static/)的权重应高于根目录(/)的默认规则。检查源站响应头:若源站返回
Cache-Control: no-cache/no-store/max-age=0或Pragma: no-cache,且CDN未开启"忽略源站不缓存标头",CDN将遵循源站指令不缓存。建议开启该选项或调整源站配置。确认请求方法:使用
curl -voa(GET请求)而非curl -I(HEAD请求)进行测试,因为HEAD请求可能不会触发L1节点对资源体的真实缓存逻辑,导致误判为MISS。检查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缓存?
通过以下步骤实现分钟级更新:
在CDN控制台为目标文件配置缓存过期时间(如 60 秒)。
开启「强制内容重新验证」开关。
关闭「优先遵循源站缓存策略」开关。
如果之前配置了较长的缓存时间,需要先通过刷新和预热资源清除旧缓存,新配置才能立即生效。
若需毫秒级实时性,建议在源站使用版本化文件名(如style-a1b2c3d.css)替代缓存策略调整,详情请参见配置 CDN 缓存过期时间。
缓存不更新时是否需要修改过期时间?
不需要修改过期时间。只需以下两步即可让单次更新立即生效:
开启「强制内容重新验证」开关,关闭「优先遵循源站缓存策略」开关。
在刷新和预热资源中提交对应文件的刷新任务。
此操作仅清除已缓存的旧内容,下一次请求会回源获取最新资源,不影响后续访问的缓存命中率。
排查异常问题
在控制台缓存过期时间设置为0,为何访问到的资源仍然不是最新内容?
在CDN控制台将缓存过期时间设置为0,目的是每次请求都直接回源站获取最新内容。然而,如果您发现访问到的资源仍然不是最新的内容,可能有几个原因:
浏览器本地缓存:浏览器可能缓存了旧内容。建议清除浏览器缓存或使用无痕模式测试。
配置生效延迟:设置缓存时间为0后,可能需要时间让所有CDN节点生效。另外,如果CDN节点未检测到更改,可能仍返回旧缓存。
源站缓存未刷新:源站服务器可能有缓存机制,未及时更新时,CDN节点回源可能获取旧缓存。
节点缓存清除延迟:修改配置前已缓存的资源可能需要时间清除。您可以手动刷新缓存,确保立即获取最新内容,详情请参见刷新和预热资源。
缓存配置为什么没有生效?
如果您配置了缓存规则,在使用过程中发现此缓存规则未生效,可能是以下原因:
生效延迟:缓存规则的修改或新增通常需要一段时间才能生效,请您在规则生效后再验证。
缓存更新机制:新规则不会立即应用到已缓存的内容,需要等到原缓存过期后才会生效。
缓存刷新操作未执行:更改缓存设置后,如果没有手动刷新缓存,旧的缓存内容将继续被提供给用户,直到自然过期。详情请参见刷新和预热资源。
缓存响应头设置不当:检查源站发送的HTTP响应头里的
Cache-Control和Expires标头是否正确设置。缓存规则有优先级:若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等回源响应头,但客户端仍遇到跨域问题且响应头中没有这些配置,可能原因如下:
可能的原因
配置未生效或错误:配置未正确设置或尚未生效。
CDN缓存:CDN节点缓存了旧的响应头。
源站问题:源站的跨域响应头与CDN配置冲突。
浏览器缓存:浏览器缓存了旧的响应。
解决方案
验证配置:确认CDN配置已正确设置并生效。
清除CDN缓存:使用CDN的刷新功能清空缓存,然后再次访问资源。具体请参见刷新和预热资源。
检查源站设置:确认源站不会返回与CDN配置冲突的跨域响应头。建议统一源站和CDN的跨域头设置。
清除浏览器缓存:清空浏览器缓存,或使用无痕模式测试。
视频播放出现 ERR_CONTENT_LENGTH_MISMATCH 错误,如何排查?
错误原因:该错误通常是因为 CDN 节点上缓存的文件长度与源站实际内容不一致,或源站返回了异常的
Content-Length响应头。常见于源站更新了视频文件内容但 CDN 仍返回旧版本缓存。解决方法:
在 CDN 控制台的刷新预热页面,提交视频 URL 的刷新请求,清除 CDN 节点上的旧缓存。
如果源站为 OSS(对象存储),可开启 CDN 缓存自动刷新功能,使源站文件更新后自动触发 CDN 缓存刷新。
检查源站的稳定性和响应一致性,确保源站不会间歇性返回异常
Content-Length。
206 状态码说明:视频播放器通常使用 Range 请求分段加载视频内容,CDN 返回
206 Partial Content状态码属于正常行为。即使命中 CDN 缓存,返回的也是 206 状态码,不属于错误。、
静态文件已命中CDN缓存,但首页仍然加载很慢?
静态资源(图片、CSS、JS 等)已命中缓存并正常加速,但首页(根路径 /)加载仍需数秒,通常是因为首页请求未配置缓存规则,每次访问都需要回源获取数据,加载速度取决于源站处理耗时。
解决方案:为加速域名添加根目录的缓存过期时间规则,使首页内容被CDN节点缓存,减少回源次数。
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击缓存配置。
在缓存过期时间页签下,单击添加。
类型:选择目录。
地址:填写
/。过期时间:根据首页内容的更新频率设置,例如 30 秒至数分钟。
权重:若已有其他缓存规则,将此规则的权重设为较低值(如 1),避免覆盖静态资源的缓存规则。
单击确定,完成配置。
配置生效后,首页内容将被CDN节点缓存,后续访问直接从节点返回,不再每次回源,首页加载速度将显著提升。更多关于缓存过期时间的配置说明,请参见配置 CDN 缓存过期时间。
优化缓存命中率
如何解决URL的传递参数为变量导致CDN缓存命中率低的问题?
可能是因为没有开启CDN的忽略参数功能,详情请参见URL的传递参数为变量导致CDN缓存命中率低。
影响CDN缓存命中率下降的因素有哪些?
影响阿里云CDN缓存命中率下降的因素如下:
刷新缓存:手动或自动刷新缓存操作可能导致短时间内命中率下降。
带宽突增:当带宽在短时间内大幅度增加时,会导致CDN节点回源请求增多,从而降低缓存命中率。
CDN节点访问新内容:如果CDN节点频繁访问首次请求的新内容,也会导致回源较多,进而表现出缓存命中率的下降趋势。
缓存规则调整:对CDN缓存策略进行修改或调整可能会影响缓存命中率,例如未配置合适的缓存过期时间或者缓存策略设置不当。
URL中带有可变参数:URL中问号(?)后的参数变化会导致不同的URL请求被视为不同的资源,即使实际指向的是同一份内容,这也会造成CDN缓存命中率降低。
未合理配置缓存过期时间:对于不同更新频率的静态文件,如未根据实际情况设置合理的缓存过期时间,可能会导致缓存资源过早失效,从而影响缓存命中率。
更多场景关于影响缓存命中率的因素介绍请参见提高CDN缓存命中率。具体可参见刷新和预热资源、忽略参数和配置CDN缓存过期时间。
怎么排查缓存命中率低、回源率高或源站带宽跑满?
检查源站缓存响应头:如果源站返回
Cache-Control: no-cache、Cache-Control: no-store、Cache-Control: max-age=0或Pragma: no-cache,CDN 默认遵循源站指令不缓存该资源,导致每次请求均回源。这是命中率低和源站带宽跑满最常见的原因。开启忽略源站不缓存标头:在 CDN 控制台的缓存过期时间配置中,勾选该选项。开启后,CDN 将忽略源站返回的
Cache-Control: no-cache、no-store、max-age=0以及Pragma: no-cache等不缓存指令,强制按控制台配置的规则进行缓存。检查缓存规则配置:确认是否误将根目录
/的缓存过期时间配置为 0 秒。如果根目录规则权重最高且过期时间为 0,则所有请求都会回源。大文件场景优化:对于视频等大文件,确保已开启 Range 回源功能,避免每次请求都回源获取完整文件。
区分动静资源:为静态资源(图片、CSS、JS 等)设置较长的缓存时间(如 1 个月),为动态内容(如 PHP、JSP)设置过期时间为 0 秒(不缓存)。
更详细的缓存命中率排查方法,请参见CDN 缓存命中率较低排查方法。
为什么视频播放或大文件下载时,日志中显示大量 206 状态码或多次回源?
这是正常现象。
206状态码:视频播放器或下载工具通常使用Range请求分段加载资源,每次请求部分内容,服务器返回 206 Partial Content。CDN命中缓存时也会返回 206。
流量费用:只要客户端向CDN发起请求并接收数据,无论是否命中缓存,均会计入CDN流出流量费用。
优化建议:确保开启CDN的Range回源功能,以便CDN节点可以按需从源站拉取片段并缓存,提高后续分段请求的命中率。同时,建议在客户端或源站配置合理的
Cache-Control头,利用浏览器本地缓存减少重复请求。
其他缓存相关常见问题,请参见缓存相关常见问题。