学习CFCFPages-CacheRules
慢才后生[TOC]
一、直接访问*.pages.dev
默认域名
- 在
source/
目录下新建_headers
配置文件(无拓展名),内容(注意缩进)如下,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # 为所有静态资源设置缓存策略 # 一年31536000,一周604800,一天86400
/search.xml Content-Type: application/xml Cache-Control: public, max-age=600, s-maxage=3600 / Cache-Control: public, max-age=600, s-maxage=3600 /posts/* Cache-Control: public, max-age=600, s-maxage=3600
/*.css Content-Type: text/css; charset=utf-8 Cache-Control: public, max-age=86400, s-maxage=31536000
/*.js Content-Type: application/javascript Cache-Control: public, max-age=604800, s-maxage=31536000
/json/* Content-Type: application/json Cache-Control: public, max-age=604800, s-maxage=31536000
/icons/* Content-Type: image/webp Cache-Control: public, max-age=604800, s-maxage=31536000
|
(Cache-Control 的 max-age 是客户端缓存时间;s-maxage 是CDN 边缘节点(Cloudflare Edge)缓存时间;单位为“秒”。)
- 部署pages项目时,会自动应用
_headers
配置文件中定义的缓存规则!

二、缓存规则
优先级
若CFPages项目内 _headers
文件中设置了 Cache-Control,并绑定了自定义域名,比如aa.com
。即便该域名对应的CF面板中另行配置了“缓存规则”,也无效!
_headers
是 Cloudflare Pages 构建阶段通过Worker Runtime
注入的,非传统源站头,优先级极高
!
控制面板规则可覆盖`非
优先级
如下:
优先级 | 来源类型 |
---|
🥇 1. Cloudflare Workers 或 Pages Runtime(如 _headers 设置的 Cache-Control ) | CF Pages |
🥈 2. 自定义 Worker 你手写的 response.headers.set() | |
🥉 3. 源站 HTTP 响应头(非 Pages) | 非CF Pages |
⚪ 4. Cloudflare 缓存规则(Cache Rules)中设置“忽略缓存控制标头”+ TTL | |
⚪ 5. 页面规则中“缓存所有内容 + 边缘 TTL”设置(已被 Cache Rules 替代) | |
三、如何清除边缘缓存
*.pages.dev默认域名
*.pages.dev
默认域名是 Cloudflare 拥有的共享域名,不在用户的 DNS 控制之下,用户没有清除缓存的权限,无法通过 Cloudflare 控制台或 API 强制清除边缘缓存,只有如下两种方法:
- 等待
s-maxage
自动过期; - 重新部署项目(版本变更,会强制刷新
边缘缓存
)
CF管理的域名
由于该自定义域名在用户的 DNS 控制之下,除了以上两种方式,还可以直接通过Cloudflare 控制台
或 API
强制清除边缘缓存
。
- 登录
Cloudflare 控制台
,点击对应区域的清除边缘缓存
按钮,如下图。

- 调用CF的
清理边缘缓存API
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| const axios = require('axios');
const CLOUDFLARE_API_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; const CLOUDFLARE_ZONE_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; const CLOUDFLARE_CACHE_API = `https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE_ID}/purge_cache`;
async function clearCache() { try { const response = await axios.post( CLOUDFLARE_CACHE_API, { purge_everything: true }, { headers: { Authorization: `Bearer ${CLOUDFLARE_API_TOKEN}`, 'Content-Type': 'application/json', }, } );
if (response.data.success) { console.log('Cloudflare 缓存(eamon.dpdns.org区域)已清理成功!'); } else { console.error('缓存清理失败:', response.data.errors); } } catch (error) { console.error('清理缓存失败:', error.message); } }
|