使用 _headers 文件为 Cloudflare Pages 站点设置自定义 HTTP 响应标头。
可以通过在项目静态资源目录中创建一个名为 _headers 的无扩展名纯文本文件来覆盖、删除或添加静态资源响应上提供的默认响应标头。此文件本身不会作为静态资源提供,而是由 Cloudflare Pages 解析,其规则将应用于静态资源响应。
如果你使用框架,通常会有一个名为 public/ 或 static/ 的目录,其中通常包含可部署的资源,例如 favicon、robots.txt 文件和站点清单。这些文件在构建期间会复制到最终输出目录,因此这是编写 _headers 文件的理想位置。如果你不使用框架,_headers 文件可以直接放入你的构建输出目录。
在 _headers 文件中定义的标头会覆盖 Cloudflare 通常发送的内容。
标头规则在多行块中定义。块的第一行是应应用规则标头的 URL 或 URL 模式。在下一行,必须写入缩进的标头名称和标头值列表:
[url]
[name]: [value]支持使用绝对 URL,但请注意绝对 URL 必须以 https 开头,且不支持指定端口。_headers 规则在匹配传入请求时会忽略传入请求的端口和协议。例如,https://example.com/path 这样的规则将匹配对 other://example.com:1234/path 的请求。
你可以在后续行上定义所需数量的 [name]: [value] 对。例如:
# This is a comment
/secure/page
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
/static/*
Access-Control-Allow-Origin: *
X-Robots-Tag: nosnippet
https://myproject.pages.dev/*
X-Robots-Tag: noindex匹配多个规则 URL 模式的传入请求将继承所有规则的标头。使用上述 _headers 文件,以下请求将应用以下标头:
| 请求 URL | 标头 |
|---|---|
https://custom.domain/secure/page |
X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: no-referrer |
https://custom.domain/static/image.jpg |
Access-Control-Allow-Origin: * X-Robots-Tag: nosnippet |
https://myproject.pages.dev/home |
X-Robots-Tag: noindex |
https://myproject.pages.dev/secure/page |
X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: no-referrer X-Robots-Tag: noindex |
https://myproject.pages.dev/static/styles.css |
Access-Control-Allow-Origin: * X-Robots-Tag: nosnippet, noindex |
你最多可以定义 100 条标头规则。_headers 文件中的每行有 2000 字符限制。整行(包括间距、标头名称和值)都计入此限制。
如果在 _headers 文件中两次应用同一标头,值将用逗号连接。
你可能希望删除默认标头或由更普遍规则添加的标头。这可以通过在标头名称前加上感叹号和空格(! )来完成。
/*
Content-Security-Policy: default-src 'self';
/*.jpg
! Content-Security-Policy_redirects 提供的相同 URL 匹配功能也可用于 _headers 文件。但是,请注意重定向在标头之前应用,因此当请求同时匹配重定向和标头时,重定向优先。
匹配时,splat 模式——以星号(*)表示——将贪婪匹配所有字符。URL 中只能包含一个 splat。
匹配的值可以在标头值中作为 :splat 占位符引用。
占位符可以使用 :placeholder_name 定义。冒号(:)后跟字母表示占位符的开始,其后的占位符名称必须由字母数字字符和下划线组成(:[A-Za-z]\w*)。每个命名占位符只能引用一次。占位符匹配除分隔符之外的所有字符;当分隔符是主机的一部分时,分隔符是句点(.)或正斜杠(/),当分隔符是路径的一部分时,分隔符只能是正斜杠(/)。
同样,匹配的值可以在 header 值中使用 :placeholder_name。
/movies/:title
x-movie-name: You are watching ":title"要启用其他域从你的 Pages 项目获取每个静态资源,可以将以下内容添加到 _headers 文件:
/*
Access-Control-Allow-Origin: **.pages.dev 子域的 URL 模式,然后仅允许从其 staging 分支子域访问:https://:project.pages.dev/*
Access-Control-Allow-Origin: https://staging.:project.pages.dev/Google ↗ 和其他搜索引擎通常支持 X-Robots-Tag 标头来指示其爬虫如何索引你的网站。
例如,要防止 \*.pages.dev 和 \*.\*.pages.dev URL 被索引,请将以下内容添加到你的 _headers 文件:
https://:project.pages.dev/*
X-Robots-Tag: noindex
https://:version.:project.pages.dev/*
X-Robots-Tag: noindex如果你有一组指纹资源文件夹(文件名中包含哈希的资源),可以在浏览器中配置更积极的缓存行为,以提高回访者的性能:
/static/*
Cache-Control: public, max-age=31556952, immutable你可以通过 X-Frame-Options ↗ 标头告知浏览器不要将你的应用程序嵌入另一个应用程序(例如使用 <iframe>)来防止点击劫持。
X-Content-Type-Options: nosniff ↗ 防止浏览器将响应解释为 Content-Type 标头定义以外的任何其他 content-type。
Referrer-Policy ↗ 允许你自定义访问者在离开页面时提供多少关于其来源的信息。
可以使用 Permissions-Policy ↗ 标头(最近从 Feature-Policy 重命名)在不同程度上禁用浏览器功能。
如果你需要对应用程序内容进行细粒度控制,Content-Security-Policy ↗ 标头允许你配置许多安全设置,包括与 X-Frame-Options 标头类似的控件。
/app/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
Permissions-Policy: document-domain=()
Content-Security-Policy: script-src 'self'; frame-ancestors 'none';