Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Worker サブリクエスト

最終更新 Markdown で表示Agent セットアップ

❮ FAQ に戻る

Worker がサブリクエストを行うとき、初期リクエストのオリジンフィールドが空になるのはなぜですか?

リクエストが Worker のあるゾーンに到達すると、最初の HTTP リクエストログは、エンドユーザーから Worker へのリクエストを表します。その Worker が後からオリジンへ fetch() すると、Cloudflare はその Worker サブリクエスト用に 2 つ目の HTTP リクエストログを書き込みます。

最初のログエントリはクライアントから Worker へのリクエストだけを対象にするため、そのエントリでは OriginResponseStatus0OriginIP は空です。これらのフィールドは、Worker からオリジンへの fetch を表す 2 つ目のログエントリに入ります。状況ごとの OriginResponseStatus=0 の意味は、Logpush でオリジンステータス 0 の 504 レスポンス を参照してください。

2 つのログエントリが表すもの

ログエントリ 典型的な ClientRequestSource の値 表す内容 オリジンフィールド
初期リクエスト eyeball エンドユーザーから Worker へのリクエスト OriginResponseStatus0OriginIP は空
Worker サブリクエスト edgeWorkerFetch Worker からオリジンへの fetch() リクエスト オリジンに接続したときに設定されます

ClientRequestSource のとりうる値の一覧は、ClientRequestSource フィールド を参照してください。

2 つのエントリの結びつき

各ログエントリには独自の RayID があります。Worker サブリクエストには ParentRayID も含まれ、これはそのサブリクエストを起動したリクエスト(直近の親)の RayID です。

フィールド 初期リクエスト Worker サブリクエスト
RayID エンドユーザーリクエストの一意なリクエスト ID サブリクエストの一意なリクエスト ID
ParentRayID 起動元リクエストの RayID

2 件のレコードを突き合わせるには:

  1. 初期リクエストを見つけ、その RayID を控えます。
  2. ParentRayID がその RayID と一致するログエントリを検索します。
  3. 一致したサブリクエストのログで、OriginIPOriginResponseStatus、その他のオリジンフィールドを確認します。

1 件のエンドユーザーリクエストから、複数の Worker サブリクエストログが生成されることがあります。各サブリクエストには独自の RayID が付き、それらのログエントリは起動元リクエストの RayIDParentRayID として使います。

ParentRayID は 1 階層だけです。直近の親を指し、元のエンドユーザーリクエストを指すわけではありません。Worker が 1 つの構成では、親がエンドユーザーリクエストなので、この違いは問題になりません。Worker を連鎖させる場合(たとえば Worker A が Worker B を呼び、Worker B がオリジンを呼ぶ)、Worker B のサブリクエストログの ParentRayID は Worker A の RayID であり、エンドユーザーの RayID ではありません。エンドユーザーリクエストまでたどるには、ParentRayID を 1 階層ずつたどります。

初期リクエストと、対応するサブリクエストのエントリを合わせると、クライアントから 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

2 つ目のログエントリがない場合

Worker がオリジンへ fetch() しない場合、突合する Worker からオリジンへのログエントリはありません。たとえば、Worker がオリジンに接続せず、直接レスポンスを返す場合があります。

Logpush に含めるとよいフィールド

Worker サブリクエストの調査を容易にするには、HTTP リクエストログに次のフィールドを含めます。

  • RayID
  • ParentRayID
  • ClientRequestSource
  • OriginIP
  • OriginResponseStatus

役に立ちましたか?