跳转到内容
搜索文档

版本覆盖

最后更新 查看 MarkdownAgent 设置

你可以使用版本覆盖将请求发送到当前部署中 Worker 的特定版本,包括那些设置为处理 0% 流量的版本。

如何设置版本覆盖

要在请求中指定版本覆盖,请在发往 Worker 的请求上设置 Cloudflare-Workers-Version-Overrides 头。Cloudflare-Workers-Version-Overrides 是一个字典结构化头(Dictionary Structured Header),可包含多个键值对。每个表示应应用覆盖的 Worker 名称。表示应使用的版本 ID,必须是字符串(String)。例如:

curl -s https://example.com -H 'Cloudflare-Workers-Version-Overrides: my-worker-name="dc8dcd28-271b-4367-9840-6c244f84cb40"'

验证版本覆盖是否已应用

请求的版本覆盖可能未生效的原因有多种。例如:

  • 部署可能不包含指定版本。最近更改后,可能需要最多几秒钟才能在全球可用。
  • 头值可能不是有效的字典(Dictionary)

如果请求的版本覆盖未生效,请求将按照渐进式部署配置中设置的百分比进行路由。

你可以使用可观测性(Observability)观察所调用的 Worker 版本,包括 Logpush 等功能。或者,如果你想告知客户端它们运行的版本(例如,以便更快、更透明地调试),可以使用版本元数据绑定(version metadata binding)并在 Worker 的响应中返回版本 ID。

冒烟测试示例

你可能希望在生产环境中测试新版本,然后再将其逐步部署到越来越多的外部流量。这通常称为"冒烟测试(smoke test)"。

在此示例中,你的部署最初配置为将所有流量路由到单个版本:

Version ID Percentage
db7cd8d3-4425-4fe7-8c81-01bf963b6067 100%

使用 wrangler versions deploy 创建新部署,为新版本指定 0%,同时保持上一版本为 100%。

Version ID Percentage
dc8dcd28-271b-4367-9840-6c244f84cb40 0%
db7cd8d3-4425-4fe7-8c81-01bf963b6067 100%

现在使用版本覆盖测试新版本,然后再逐步将新版本推进到 100%:

curl -s https://example.com -H 'Cloudflare-Workers-Version-Overrides: my-worker-name="dc8dcd28-271b-4367-9840-6c244f84cb40"'

服务绑定

使用 服务绑定 从一个 Worker 向另一个 Worker 发起子请求时,可以设置 Cloudflare-Workers-Version-Overrides 头。这允许你从上游 Worker 测试下游 Worker 的特定版本。

如果转发原始请求对象,覆盖头会自动传递:

// The override header from the inbound request is forwarded to the downstream Worker.
export default {
	async fetch(request, env) {
		return env.MY_SERVICE.fetch(request);
	},
};
// The override header from the inbound request is forwarded to the downstream Worker.
export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		return env.MY_SERVICE.fetch(request);
	},
};

或者,你可以显式设置覆盖头:

// Replace the version ID with the target version from `wrangler versions list`.
export default {
	async fetch(request, env) {
		const response = await env.MY_SERVICE.fetch("https://example.com/", {
			headers: {
				"Cloudflare-Workers-Version-Overrides":
					'my-downstream-worker="dc8dcd28-271b-4367-9840-6c244f84cb40"',
			},
		});
		return response;
	},
};
// Replace the version ID with the target version from `wrangler versions list`.
export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const response = await env.MY_SERVICE.fetch("https://example.com/", {
			headers: {
				"Cloudflare-Workers-Version-Overrides":
					'my-downstream-worker="dc8dcd28-271b-4367-9840-6c244f84cb40"',
			},
		});
		return response;
	},
};

相关资源

这篇文档对您有帮助吗?