你可以使用版本覆盖将请求发送到当前部署中 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;
},
};- 版本亲和性(version affinity) - 在渐进式部署期间使用 cookie 和头将用户固定到特定版本。
- 渐进式部署 - 了解基于百分比的流量拆分如何工作。
- Service bindings - Worker 之间如何通信。
- 版本元数据绑定(version metadata binding) - 从 Worker 内部访问版本 ID 和标签。