Insights / 技术解读

Cloudflare Pages 静态资源与 Functions 的安全响应头

区分 Cloudflare Pages 静态响应与 Functions 响应,并检查 _headers、CSP 和当前网站配置。

  • 技术
  • Cloudflare
  • 安全
Cloudflare Pages 静态资源与 Functions 的安全响应头
本文目录
  1. 区分静态响应和 Functions
  2. 查看当前配置
  3. 发布与核验

Cloudflare Pages的CSP或缓存设置无效时,先确认URL返回静态资源还是Functions响应。根据Cloudflare Pages: Headers选择配置位置,同时检查成功与错误响应的响应头,有助于发现新增API后的遗漏。

本文最初记录了2026年3月将联系表单交给外部服务、使网站回到 Cloudflare Pages 静态发布的过程。此后架构已有变化。截至2026年9月,Acecore 官网在静态页面之外也使用 Pages Functions,处理联系、评论、搜索、AI 辅助及 CMS API。旧方案属于历史记录,下面说明仍然重要的响应头边界。

区分静态响应和 Functions

public/_headers 只应用于 Pages 提供的静态资源响应。Cloudflare 官方明确指出,即使 URL 规则匹配,它也不会应用于 Pages Functions 生成的响应。API 所需的 CORS、缓存和安全响应头应由 Function 的 Response 设置。

不要认为写一次 _headers 就覆盖所有页面和 API。应分别检查静态 HTML 与 /api/* 的实际响应头。

静态响应与 Functions 响应的 header 设置边界 静态文件与 API 的 header 配置位置不同。发布后分别检查两类响应。
  1. 静态文件响应 通过 _headers 设置;检查 Pages 实际返回的响应。
  2. Function API 响应 在 Function 的 Response 上设置;单独检查 API 响应。

查看当前配置

当前 _headers要求 HTML 重新验证,对带哈希的 _astro/ 资源使用较长缓存。CMS 有独立的 CSP,X-Frame-Options 为 SAMEORIGIN。旧文中的 form-action https://ssgform.com、HTML 一小时缓存及 DENY 均不应当作当前值复制。

动态路径可在 Pages Functions 代码中查看。请根据自己网站实际使用的脚本、图像、框架和请求检查 CSP,不要直接移植 Acecore 的策略。

发布与核验

官网通过连接 GitHub 的 Cloudflare Pages 发布 main。.node-version记录当前 Node 版本,CI 根据 package.json 执行 npm run build。2026年3月的“Node.js 22 / npx astro build”表格只是历史记录。

应分别检查 PR 预览、main 构建、Pages 生产部署以及公开 URL。平台行为请参阅 Cloudflare 的 Pages 响应头文档。