跳转到内容
搜索文档

Worker 子请求

最后更新 查看 MarkdownAgent 设置

❮ 返回常见问题

当 Worker 发出子请求时,为什么初始请求上的源站字段为空?

当请求命中带有 Worker 的 zone 时,初始 HTTP 请求日志表示最终用户到 Worker 的请求。如果该 Worker 随后对你的源站发出 fetch() 请求,Cloudflare 会为该 Worker 子请求写入第二条 HTTP 请求日志。

因为初始日志条目仅涵盖从客户端到 Worker 的请求,所以该条目上的 OriginResponseStatus 为 0,OriginIP 为空。这些字段会在第二条日志条目上填充,该条目表示 Worker 到源站的 fetch。有关 OriginResponseStatus=0 在不同上下文中的含义,请参阅 Logpush 中带有源站状态 0 的 504 响应。

两条日志条目分别表示什么

日志条目 典型的 ClientRequestSource 值 表示内容 源站字段
初始请求 eyeball 最终用户到 Worker 的请求 OriginResponseStatus 为 0,OriginIP 为空
Worker 子请求 edgeWorkerFetch Worker 到源站的 fetch() 请求 在联系到源站时设置

请参阅 ClientRequestSource 字段,了解可能的 ClientRequestSource 值的完整列表。

两条条目如何关联

每条日志条目都有自己的 RayID。Worker 子请求还包含 ParentRayID,即触发它的请求的 RayID — 其直接父请求。

字段 初始请求 Worker 子请求
RayID 最终用户请求的唯一请求 ID 子请求的唯一请求 ID
ParentRayID 空 触发它的请求的 RayID

要关联这两条记录:

  1. 找到初始请求并记下其 RayID。
  2. 搜索 ParentRayID 等于该 RayID 的日志条目。
  3. 查看匹配的子请求日志条目中的 OriginIP、OriginResponseStatus 和其他源站字段。

一个最终用户请求可以产生多条 Worker 子请求日志条目。每个子请求都有自己的 RayID,且这些日志条目各自将触发请求的 RayID 用作其 ParentRayID。

ParentRayID 是单层的 — 它指向直接父请求,而不是原始最终用户请求。在单 Worker 设置中,这一区别无关紧要,因为父请求就是最终用户请求。当 Workers 被链式调用时(例如,Worker A 调用 Worker B,Worker B 再调用源站),Worker B 的子请求日志将 Worker A 的 RayID 作为其 ParentRayID,而不是最终用户的。要完整追溯到最终用户请求,请逐级跟随每个 ParentRayID。

将初始请求与匹配的子请求条目结合使用,可以重建从客户端到 Worker 再到源站的完整请求路径。

示例

# Initial request
ClientRequestSource: eyeball
RayID: 7b52f2c4f9f64c1a
ParentRayID:
OriginResponseStatus: 0

# Worker subrequest
ClientRequestSource: edgeWorkerFetch
RayID: 7b52f2c4f9f64c1b
ParentRayID: 7b52f2c4f9f64c1a
OriginResponseStatus: 200
OriginIP: 192.0.2.10

没有第二条日志条目时

如果 Worker 未对源站发出 fetch() 请求,则没有可关联的 Worker 到源站日志条目。例如,Worker 可能直接返回响应而不联系源站。

建议在 Logpush 中包含的字段

为更轻松地调查 Worker 子请求,请在 HTTP 请求日志中包含这些字段:

  • RayID
  • ParentRayID
  • ClientRequestSource
  • OriginIP
  • OriginResponseStatus

这篇文档对您有帮助吗?