先说结论:Cloudflare Polish 属于付费功能,免费套餐无法使用,且开启后需 purge 缓存才能看到效果。
- 先确认:账户是否为 Pro、Business 或 Enterprise 套餐
- 先处理:在 Speed 优化页面开启 Polish 并选择 Lossy 或 Lossless
- 再验证:检查 HTTP 响应头中是否包含 cf-polished 字段
核心原因分析
Polish 是 Cloudflare 边缘节点对图片进行压缩和格式转换的功能。它不生效通常有三个原因:首先是权限问题,官方文档明确说明免费套餐不支持 Polish 功能;其次是缓存问题,开启功能前请求的图片已被边缘节点缓存,新策略未命中;最后是配置冲突,例如设置了 bypass 缓存的 Page Rule,导致请求直接回源,绕过了优化处理。
配置与排查步骤
由于 Polish 是控制台配置项,不涉及服务器命令,请按以下顺序操作:
- 核对套餐权限
登录 Cloudflare Dashboard,进入对应域名管理页。首页查看当前计划,如果显示 Free Plan,Polish 功能无法开启。如需使用需升级套餐。 - 开启优化开关
左侧菜单选择 Speed > Optimization。找到 Polish 选项,确认是否可选(灰色不可选通常代表套餐不支持)。将 Polish 设置为 Lossy(有损)或 Lossless(无损)。Lossy 压缩率更高但可能影响动图,Lossless 保留更多细节。 - 检查 Page Rules
进入 Rules > Page Rules,检查是否有规则设置了 Cache Level: Bypass 或 Disable Apps。如果有针对图片路径的 bypass 规则,Polish 不会生效,建议删除或调整优先级。 - 清理缓存
配置修改后,旧图片仍可能存在于边缘节点。进入 Caching > Configuration,点击 Purge Everything(注意:这将清除所有缓存,高流量站点建议使用 Purge by URL),确保新请求触发重新优化。
验证是否生效
使用 curl 命令或浏览器开发者工具查看图片请求的响应头。执行以下命令:
curl -I https://你的域名/图片路径.jpg
观察返回头中是否包含 cf-polished 字段。如果看到 cf-polished: status=ok 或类似内容,说明功能已介入。如果该字段缺失,说明请求未经过 Polish 处理。同时可以对比优化前后的 Content-Length,具体压缩比例因图片内容而异,官方未提供统一量化数据。
常见坑
1. 动图变静图
选择 Lossy 模式时,animated GIF 可能会被转换为静态图片,这是已知行为。如果需要保留动画,请使用 Lossless 模式或不要对 GIF 启用 Polish。
2. SVG 不支持
Polish 主要针对位图格式(JPEG, PNG, WebP),SVG 矢量图不在处理范围内,不要期望 SVG 文件大小发生变化。
3. 浏览器兼容性
Polish 可以自动转换 WebP,但这取决于访问者的浏览器是否支持。如果浏览器不支持 WebP,Cloudflare 会返回原格式,此时仍会有压缩效果,但格式不会变。
4. 缓存 TTL 设置
如果源站设置了极短的 Cache-Control 头部,可能导致边缘节点频繁回源,虽然 Polish 仍会处理,但可能影响整体加载性能。
参考来源
- Cloudflare Official Documentation, "Polish", developers.cloudflare.com/speed/optimization/content/polish/
- Cloudflare Support, "What features are included in each plan", developers.cloudflare.com/plans/