缓存与清除
配置边缘缓存、浏览器缓存、缓存键与负缓存,并按 URL、通配符或全站清除缓存。
缓存设置位于站点详情页的 缓存 标签页(/cdn/domains/<域名>/cache),对站点下所有主机名生效。修改后点击页面底部的 保存设置;需要立即让新内容生效时,使用右上角的 清除缓存。
边缘缓存
| 设置 | 说明 |
|---|---|
| 边缘缓存 | 自动:根据源站响应头判断是否缓存;启用:开启缓存;禁用:不在边缘缓存任何内容。 |
| 源站故障时返回过期缓存 | 源站超时或返回 500/502/503/504 时,返回已过期的缓存而不是错误页面。默认开启。 |
| 缓存时间模式 | 决定缓存时长如何计算,见下表。 |
| 缓存时间(秒) | 与缓存时间模式配合使用的配置值。页面提供 1 小时、1 天、7 天三个推荐值。 |
缓存时间模式:
| 模式 | 行为 |
|---|---|
| 跟随源站或默认 | 优先使用源站 Cache-Control / Expires 给出的时间;源站未给出时使用配置值。 |
| 固定 | 忽略源站给出的时间,始终使用配置值。 |
| 跟随源站 | 完全遵循源站;源站没有给出可缓存的指示时不缓存。 |
| 取最小值 / 取最大值 | 在源站时间与配置值之间取较小 / 较大者;源站未给出时使用配置值。 |
按文件类型缓存
在 按文件类型缓存 中可以为扩展名设置缓存时间(如 jpg,png,gif 缓存 7 天)。当源站响应没有给出明确的缓存时间(max-age、s-maxage 或 Expires)时,边缘按扩展名使用该时间;源站已明确指定时以源站为准。
始终不会被缓存的响应
无论如何设置,下列响应都不会进入边缘缓存:
- 源站返回
Cache-Control: no-store或private; - 响应带有
Set-Cookie; 206 Partial Content(Range 请求)响应;- GET、HEAD 以外的请求。
浏览器缓存
浏览器缓存 控制边缘是否为浏览器补充 Cache-Control 头:
- 启用:对于边缘实际缓存了的响应,如果源站没有返回
Cache-Control,边缘会添加Cache-Control: public, max-age=<该响应在边缘的缓存时间>,使浏览器缓存时间与边缘保持一致。 - 自动 / 禁用:边缘不添加浏览器缓存头。
无论哪种设置,源站自己返回的 Cache-Control 都会原样传给浏览器;边缘没有缓存的响应(例如动态接口)、非 GET/HEAD 请求、状态码 400 及以上、带 Set-Cookie 的响应都不会被添加浏览器缓存头。这样可以避免动态内容被浏览器长期缓存。
想让浏览器对静态资源缓存更久,最可靠的方式是在源站为这些资源返回明确的 Cache-Control: max-age=...。
缓存键
缓存键决定哪些请求共用同一份缓存。页面下方的预览会实时展示当前配置下缓存键由哪些部分组成。
Query String处理模式:
| 模式 | 行为 | 示例 |
|---|---|---|
| 标准 | 原样保留全部查询参数 | ?a=3 与 ?a=4 是两份缓存 |
| 忽略 | 忽略全部查询参数 | ?a=3 与 ?a=4 命中同一份缓存 |
| 排序 | 参数按名称排序后全部纳入 | ?b=2&a=1 与 ?a=1&b=2 命中同一份缓存 |
| 白名单 | 只保留列出的参数 | 填写 id,page |
| 黑名单 | 排除列出的参数 | 填写 utm_source,utm_medium,ref |
白名单 / 黑名单的参数名用逗号分隔。
其他维度:
- 按设备类型区分:移动端与桌面端分别缓存。
- 按国家区分:按访客所在国家 / 地区分别缓存。
- 按语言区分:按
Accept-Language分别缓存。 - 缓存主机模式:缓存键中使用的主机名来源,可选「原始请求」(访客请求的 Host,默认)、「解析后」(站点匹配到的主机名)或「Host头」(回源时使用的 Host)。
每增加一个区分维度,同一 URL 就可能产生多份缓存,命中率会相应下降。只开启确实需要的维度。
高级缓存 / 负缓存
| 设置 | 说明 |
|---|---|
| 按状态码缓存(负缓存) | 为特定状态码(如 404、301)单独设置缓存秒数,优先级高于其他缓存时间设置。可避免错误响应被反复回源。 |
| 最小缓存时间 (min_ttl) / 最大缓存时间 (max_ttl) | 对最终缓存时长设置下限 / 上限,0 表示不限制。 |
| 故障宽限 (stale_if_error) | 源站故障时,在该秒数窗口内继续返回过期缓存。 |
| 带 Authorization 不缓存 | 请求带 Authorization 头时跳过缓存,直接回源。 |
| 尊重客户端 no-cache | 客户端请求带 Cache-Control: no-cache 时跳过缓存。 |
| 绕过缓存的会话 Cookie | 请求带有列出的 Cookie(如 session、token)时跳过缓存。 |
回源防护 / Origin Shield
回源最大并发 限制单个站点同时回源的请求数(0 表示不限制)。超过上限时按 超限动作(阶梯) 依次处理:优先返回缓存(cache_first)→ 排队等待(queue,可设置队列长度上限与等待毫秒数)→ 人机挑战(challenge)→ 直接拦截(block,按 Retry-After 返回重试时间)。适合保护承载能力有限的源站。
清除缓存
修改缓存设置不会让已有缓存立即失效。要让边缘重新回源获取最新内容:
- 在 缓存 标签页右上角点击 清除缓存(域名管理 列表和 概览 页也提供一键清除全站缓存)。
- 选择清除方式:
- 清除全站缓存:清除该站点的全部缓存。
- 按 URL 清除:每行填写一个 URL,可以是完整 URL(
https://example.com/css/app.css)或路径(/css/app.css)。
- 点击 确认清除。
按 URL 清除的规则:
- 带查询参数(如
/list?page=2):只清除该参数组合对应的那一份缓存(会按站点的 Query String 处理模式归一后匹配)。 - 不带查询参数(如
/list):清除该路径下所有查询参数变体。 - 通配符:单独填写一行含
*的地址,可按模式清除,例如https://example.com/static/*清除该目录下的全部内容。如果多行中含有*,会改为清除全站缓存。
清除请求提交后会异步下发到所有边缘节点,通常在数秒内完成。提交后可以用 curl -I 检查响应头 X-Cache-Status,首个请求应为 MISS。
清除全站缓存后,短时间内所有请求都会回源,源站负载会明显上升。只更新了少量文件时,优先按 URL 清除。