跳转到内容
搜索文档

标头

最后更新 查看 MarkdownAgent 设置

默认标头

提供静态资产时,Workers 会默认在响应中附加一些标头,包括:

  • Content-Type

    若在资产上传过程中提供了 Content-Type 标头,响应会附加该标头。Wrangler 会根据文件扩展名自动确定 MIME 类型。

  • Cache-Control: public, max-age=0, must-revalidate

    当请求不含 AuthorizationRange 标头时发送,此响应标头告知浏览器可以缓存资产,但每次使用前都应重新验证内容是否仍有效。该默认行为在静态页面性能与避免提供过期内容之间取得平衡。

  • ETag

    此标头与默认 Cache-Control 标头配合使用。其值为静态资产文件的哈希,浏览器可在后续请求中使用 If-None-Match 标头检查 freshness,匹配时无需重新下载整个文件。

  • CF-Cache-Status

    此标头表示资产是否从缓存提供(HIT)或未命中(MISS)。1

Cloudflare 保留随时为静态资产响应附加新标头的权利,以提升性能或加强 Worker 应用的安全性。

自定义标头

可以通过在项目静态资源目录中创建一个名为 _headers 的无扩展名纯文本文件来覆盖、删除或添加静态资源响应上提供的默认响应标头。此文件本身不会作为静态资源提供,而是由 Workers 解析,其规则将应用于静态资源响应。

如果你使用框架,通常会有一个名为 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://myworker.mysubdomain.workers.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://myworker.mysubdomain.workers.dev/home X-Robots-Tag: noindex
https://myworker.mysubdomain.workers.dev/secure/page X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
X-Robots-Tag: noindex
https://myworker.mysubdomain.workers.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 文件。但是,请注意重定向在标头之前应用,因此当请求同时匹配重定向和标头时,重定向优先。

Splats

匹配时,splat 模式——以星号(*)表示——将贪婪匹配所有字符。URL 中只能包含一个 splat。

匹配的值可以在标头值中作为 :splat 占位符引用。

占位符

占位符可以使用 :placeholder_name 定义。冒号(:)后跟字母表示占位符的开始,其后的占位符名称必须由字母数字字符和下划线组成(:[A-Za-z]\w*)。每个命名占位符只能引用一次。占位符匹配除分隔符之外的所有字符;当分隔符是主机的一部分时,分隔符是句点(.)或正斜杠(/),当分隔符是路径的一部分时,分隔符只能是正斜杠(/)。

同样,匹配的值可以在 header 值中使用 :placeholder_name

/movies/:title
  x-movie-name: You are watching ":title"

示例

跨源资源共享 (CORS)

要启用其他域从你的 Worker获取每个静态资源,可以将以下内容添加到 _headers 文件:

/*
  Access-Control-Allow-Origin: *
这会将 `Access-Control-Allow-Origin` 标头应用于任何传入 URL。请注意,CORS 规范仅允许 `*`、`null` 或精确源作为有效的 `Access-Control-Allow-Origin` 值——源中的通配符模式不受支持。要允许来自特定预览 URL 的 CORS,你需要在 Worker 代码中动态处理此问题,而不是通过 `_headers` 文件。
防止 workers.dev URL 出现在搜索结果中

Google 和其他搜索引擎通常支持 X-Robots-Tag 标头来指示其爬虫如何索引你的网站。

例如,要防止 \*.\*.workers.dev URL 被索引,请将以下内容添加到你的 _headers 文件:

https://:version.:subdomain.workers.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';

Footnotes

  1. 由于我们未来希望解决的技术限制,CF-Cache-Status 标头并非始终完全准确,可能出现假阳性和假阴性,但应属少见。在此之前,可将此标头视为返回“概率性”结果。

这篇文档对您有帮助吗?