Skip to Content

錯誤

外層格式

一切都以 detail 為鍵,三種形狀之一:

  1. 字串 — {"detail": "<sanitized message>"}(EdgeWorkerHttpErrorResponse)。除 422 外每個文件化 ≥400 狀態的預設。
  2. 清單 — {"detail": [{"loc": [...], "msg": "...", "type": "..."}]}(EdgeWorkerValidationErrorResponse)。FastAPI 的 422 以及提交路由手工產生的 422(loc: ["body", "project"],機器可讀的代碼放在 type),還有操作設定與部署路由手工產生的 422。
  3. 帶代碼物件 — {"detail": {"code": "...", "message": "..."}}。不再只出現在 POST /worker/versions 的 503:存取政策、執行期設定、操作設定、機密、部署、OpenAPI、原始碼下載與服務帳號路由的 409、413、503 也會帶代碼 detail。在每條控制路由上都要把 detail 當成無標記 union string | {code, message},當它是物件時依 detail.code 分支。產生的 OpenAPI 對此描述不足:多數這類回應仍被標成字串形狀(只有機密路由、提交路由與原始碼下載路由宣告了 union)。

dispatcher 與 runtime 的錯誤(公開/dispatch 通道)用另一種外層:{"code", "message", "requestId"} 加 cache-control: no-store。

狀態碼語意

狀態在這裡的意義
418未驗證:沒有 Bearer JWT,或 token 無法解碼(x-api-key 這類非 JWT 憑證根本不會被讀取)。Could not validate credentials(+ WWW-Authenticate: Bearer)。JWT 有效但帳號未通過共用的帳號檢查時,改回 451 Account expired、401 Account not verified yet、409 Account disabled 或 410 Account deleted(依此順序檢查)。
403身分缺失或失效、呼叫者是服務帳號,或角色不足 — 精確字串見 403 目錄。
404在已錨定租戶內資源不存在 — 異租戶與不存在看起來一樣(Department Worker not found、Department not found、Worker operation not found、Service account not found、Edge Worker starter not found、帶代碼的 edge_worker_version_source_unavailable,加上兩條公司管理路徑上 FastAPI 原生的 Not Found)。另外:JWT 缺 claims → 404 Could not validate credentials (username) not found;JWT 對應的使用者不存在 → 404 User not found。
409狀態或 CAS 衝突、設定鎖被另一個設定變更或部署持有,或 release 太舊不支援該功能(帶代碼)。
413位元組上限;在有界路由上於驗證之前觸發(服務帳號路由用一般 router,不適用)。
414路徑/query 超過閘道上限。
422契約違規(Pydantic、builder、操作設定完整性、服務帳號 id)。
500只出現在版本原始碼下載:帶代碼的 edge_worker_source_integrity_failed。
503必要的 provider/服務無法使用,或 provider 的回答沒通過後端的信任但驗證檢查(例如 CAS revision 漂移、精確鍵集合不符),或已部署的 release 在後端讀取與控制呼叫之間改變了(帶代碼的 worker_release_unavailable:請重試)。

403 目錄(精確字串)

Edge Workers require TeamSync JWT authentication(防禦性檢查,見下)· Insufficient permissions.(管理者與公司路由)· Service accounts cannot invoke Edge Workers · A live Edge Worker user is required · A department identity is required for Edge Workers · A live department identity is required for Edge Workers · A company identity is required for Edge Workers

  • Edge Workers require TeamSync JWT authentication 是一道防禦性檢查,已發佈的只收 JWT 依賴不會走到它:沒有有效 Bearer JWT 的請求(包括 x-api-key 金鑰)會先得到 418。見驗證。
  • 服務帳號拒絕與有效使用者重驗,適用於每條部門範圍的路由(成員與管理者),包括 /starters 與部門服務帳號路由。公司路由(/company/departments/**)不執行服務帳號拒絕。服務帳號是角色 0,所以在管理者路由上通常會先遇到 Insufficient permissions.。
  • A live Edge Worker user is required:重新讀取的使用者列不存在、已刪除、已停用、未驗證或已過期。
  • 服務帳號路由另有 A live manager identity is required(操作中的管理者列已不存在),以及防禦性的共用角色階層檢查:403 Insufficient permissions. (Different Company)、400 Cannot modify yourself.(目標就是呼叫者本人)與 403 Insufficient permissions.(目標的角色並未嚴格低於操作中的管理者)。
  • 公開與 dispatch 通道有自己的 403 代碼(access_denied、worker_retired、operation_settings_pending):見本頁最後的 dispatcher 與 runtime 表。

409 目錄(精確字串)

純字串:Department Worker must be deployed and active · Access policy revision is stale · Runtime config revision is stale · Operation-settings revision is stale · Worker secret mutation is stale · Operation settings are pending(設定尚未 reconciled 的 Worker 撤銷操作金鑰)· a Worker already exists for this department · Worker revision changed; refresh before deploying · Worker version was superseded; V2 rollback is not supported · uncertain deployment requires company reconciliation · Worker version cannot deploy from state '<state>' · Worker deployment sequence is exhausted · deployment intent already exists · Repair parameters do not match the original request · Worker revision is stale; refresh department state · Deployment revision is stale; refresh department state · Only an uncertain deployment can be reconciled · Only an uncertain deployment version can be reconciled · Service account name is unavailable · Service-account credential delivery is stale · operation-settings digest differs from the existing deployment(部署競態)· worker_migration_in_progress(平台搬移 Worker 期間的部署,但搬移短暫暫停的期間除外,那時部署回 Operation-settings revision is stale,已持有逐操作設定的 Worker(或帶有 operation_settings 的請求)也除外,它得到 503 Department Worker control change is unavailable;搬移 Worker)· Worker deployment target cannot be verified(競態後備,對應下面帶代碼的 worker_serving_target_unavailable)· Worker deployment target is unavailable(同樣的競態,或 Worker 第一次部署時,此環境所設定的預設位置無法使用:屬於平台設定問題)

a deployment is already active for this department Worker 現在只是部署 outbox 內的競態後備:另一張票證仍在進行時再送部署請求,通常會拿到下面帶代碼的 deployment_in_progress。曾比對舊字串的用戶端必須改讀 detail.code。

帶代碼的 409({"code", "message"}):

codemessage出現位置
deployment_in_progressAnother Worker settings mutation or deployment is in progress部門的設定鎖被持有:操作設定 PUT、操作金鑰輪替/撤銷、部署、服務帳號憑證重設
deployment_in_progressOperation settings cannot change during a deployment另一張票證尚未終態(pending、leased、uncertain)時做操作設定 PUT 或部署
operation_settings_require_supported_releaseRe-upload and deploy this Worker with the operation-settings runtime policy before changing per-operation access在早於 builder 政策 v2.8 的現行 release 上呼叫操作設定與操作金鑰路由
operation_settings_require_supported_releaseThe selected release does not support operation settings對這類版本呼叫 GET /worker/operation-settings?version_id=
operation_settings_require_supported_releaseDeploy the Worker once before adding operation settings · The live release does not support operation settings · The target release does not support operation settings帶 operation_settings 的部署;一旦現行 release 是 v2.8 以上,即使不帶設定也拒絕部署 v2.8 之前的版本
operation_settings_pendingWrite operation settings before assigning an operation API key設定尚未 reconciled 的 Worker 輪替操作金鑰(legacy 的 Worker 必須先 PUT 一次設定)
operation_settings_pendingReconcile the live release before deploying settings現行 v2.8+ release 的表是 pending 時的任何部署(無論有沒有帶 operation_settings)
operation_settings_dedupe_mismatchDeployment settings differ from the existing ticket以不同(或沒有)的設定精確重試同一個部署
worker_serving_target_unavailableWorker deployment target cannot be verifiedPOST /worker/deployments 與公司修復路由:後端無法確認是哪個 Worker 位置在服務該 Worker 的上線 release(例如還沒有經過驗證的位置,或 Worker 的紀錄在那一刻被另一項操作鎖住);沒有排入任何工作
worker_serving_target_unavailableDepartment Worker control requires a verified serving-target attestation每個有稽核的控制變更(存取政策、執行期設定、操作設定、操作金鑰、機密):原因相同,沒有任何東西被變更
worker_wide_key_legacy_onlyRotate an operation key instead現行 release 為 builder 政策 v2.8 以上時呼叫 POST /worker/access-policy/api-key
worker_secrets_unsupportedThis deployed Worker release does not support Worker secrets; re-upload and deploy the projectGET /worker/secrets 在早於 v2.6 的 release、PUT 在早於 v2.7 的 release(DELETE 在任何 release 都可用)
secret_limit_exceededThe department Worker secret count limit is exhausted · Worker secret limit was reached(競態後備)已有 256 個時對新名稱 PUT /worker/secrets/{name}
service_account_credentials_require_supported_releaseThe live release does not support service-account bindings; re-upload and deploy the project first(另有 target 變體)在早於 v2.9 的 release 上,操作設定 PUT 或部署引用服務帳號
service_account_credentials_require_supported_releaseUnbind every service account (PUT operation-settings) before deploying a release without service-account support現行 release 持有已交付憑證時部署 v2.9 之前的 release
service_account_limit_exceededWorker service-account credential limit was reached單一 Worker 內已交付憑證超過 256 個

僅地端:部署或修復在 resync epoch 進行中回 409,detail 為純字串 edge_workers_maintenance,還原保護(restore hold)開啟時為 edge_workers_restore_pending(雲端永遠不會送出這兩個)。見地端 Edge Workers。

413 目錄

Detail上限
Worker submission request exceeds limitmultipart 外層 > 2 162 688 B(2 MiB + 64 KiB)
project archive exceeds 2097152 bytesproject part > 2 MiB
Worker runtime config request exceeds limit> 73 728 B
Worker access policy request exceeds limit> 16 384 B
Worker operation settings request exceeds limit/worker/operation-settings 底下任何 PUT/POST/DELETE > 65 536 B
Worker secret request exceeds limitPUT /worker/secrets/{name} > 409 600 B
Worker repair request exceeds limit> 8 192 B
Worker request body exceeds 1 MiBinvoke body > 1 048 576 B
帶代碼的 secret_size_exceededDepartment Worker secret storage exceeds its total size limit(寫入前檢查)或 Worker secret storage limit was reached(競態後備):所有機密值加總會超過 16 MiB

POST /worker/deployments 可帶選用的 operation_settings 物件,但仍沒有路由層級的 body 上限。

422 目錄

路由type / detail
POST /worker/versionsproject_multipart_invalid、project_archive_required、project_archive_filename_invalid、project_archive_content_type_invalid、project_archive_invalid(不是 gzip 串流)、project_invalid(任何 builder 拒絕)、manifest_v2_invalid — 全部帶 loc: ["body", "project"]
PUT /worker/operation-settingsoperation_settings_incomplete(loc: ["body", "operations"]:清單必須剛好列出現行 manifest 的所有操作);service_account_not_found(loc 指向出問題的 default_service_account_id 或 operations[i].service_account_id);FastAPI 驗證(重複 id、CIDR 規則、CIDR 總數超過 256)
POST /worker/deploymentsoperation_not_found(loc: ["body", "operations"]:列出的 id 不在目標 manifest 內);service_account_not_found
PUT /worker/secrets/{name}字串 Worker secret name is invalid or reserved(保留的 TEAMSYNC_ 前綴);其餘是淨化過的清單,每筆剛好是 {"loc", "type", "msg": "validation_error:<type>"},絕不回顯機密值
DELETE /worker/secrets/{name}字串 Worker secret name is invalid or reserved(保留的 TEAMSYNC_ 前綴);違反格式的名稱會得到標準的 FastAPI 清單
服務帳號路由Invalid cursor(清單/候選游標 > 1 000 000)、add and remove must be disjoint(聊天室)、FastAPI 驗證(非 UUID 的 id、清單超過 100 個 id、未知的 body 欄位)

503 目錄(精確字串)

純字串:Deployed department Worker release is unavailable · Department Worker runtime config is unavailable · Department Worker access policy is unavailable · Department Worker operation settings are unavailable · Department Worker operation key is unavailable · Department Worker secrets are unavailable · Department Worker service-account credentials are unavailable · Operation-settings mutation lock is unavailable · Department Worker public URL is unavailable · Department Worker control change is unavailable · Department Worker serving target is unavailable(Worker 所記錄的服務位置不一致,或其 release 在此期間改變;多處都會丟出它,其中包括存取政策與操作設定路由、執行期設定的讀取、機密清單與機密寫入、OpenAPI 文件、部署中的操作設定暫存,以及 invoke 路由;其他有稽核的變更則改回 409 worker_serving_target_unavailable)· Department Worker gateway URL is not configured · Deployed department Worker contract is unavailable · Department Worker gateway is unavailable · Deployment dispatch is unavailable · Edge Worker provider is not configured(提交、部署與修復)· Edge Worker artifact storage is unavailable · Edge Worker artifact compensation is unavailable

帶代碼的 503({"code", "message"}):

codemessage出現位置
worker_release_unavailableWorker release changed; retry this request每個有稽核的控制變更(存取政策、執行期設定、操作設定、操作金鑰、機密),以及操作設定與 GET /worker/openapi.json 的讀取(v2.8 以上的 release),當已部署的 release 在後端讀取與呼叫之間改變時
operation_settings_live_read_unavailableRetry the deployment after the live settings read recovers部署:現行設定讀取連續失敗兩次
api_base_unconfiguredThis deployment's HOST is not a bare HTTPS originAPI 來源不是單純的 https origin 時綁定服務帳號
service_account_verifier_unavailableService-account credentials cannot be verified by this deployment必須交付新服務帳號憑證的操作設定 PUT 或部署,而此部署無法推導其 verifier(重設則回報 delivery: "failed")
builder_unavailable 或 builder_invalid_outputDepartment Worker builder is unavailable提交:builder 無法執行或回傳了無法使用的輸出
builder_invalid_outputDepartment Worker builder returned invalid evidence提交:builder 的證據與後端的正規形式不一致

機密值送出後的 503 並不代表有沒有寫入:請列出機密並比對 updated_at,或再寫一次。

服務帳號路由

七條部門路由與其公司鏡像(見服務帳號)在上述關卡之外另有:404 Service account not found(不存在、已刪除、屬於其他部門、其他公司,或是人類使用者的 id:同一種形狀)、404 Department not found(公司鏡像路徑,或建立時的競態)、409 Service account name is unavailable(該 UTC 秒內的 99 個名稱全被占用)、422 Invalid cursor 與 add and remove must be disjoint。憑證重設在設定鎖被持有時回 409 deployment_in_progress,鎖的儲存無法使用時回 503 Operation-settings mutation lock is unavailable;所有憑證交付問題都是 200 加上 delivery: "failed",絕不是錯誤狀態。刪除即使 Worker 清理失敗或被延後,也回 200。

範本與原始碼下載

狀態Detail時機
404Edge Worker starter not foundstarter_id 或 language 超出列舉,或組合不在目錄內(不是 422)
503Edge Worker starter catalog is unavailable映像內的目錄檔不存在、無法讀取或無效
503Edge Worker starter artifact is unavailable產物不是 starters 根目錄內的一般檔案,或其大小或 SHA-256 與目錄不符
404Department Worker not found版本原始碼:沒有 Worker、未知 id,或其他租戶的版本
404{"code": "edge_worker_version_source_unavailable", "message": "This version has no stored source archive"}版本原始碼:該修訂版沒有儲存壓縮檔
500{"code": "edge_worker_source_integrity_failed", "message": "The stored source archive failed its integrity check"}版本原始碼:資料列損毀,或儲存的位元組與 project_digest 不符
503{"code": "edge_worker_artifact_unavailable", "message": "Edge Worker artifact storage is unavailable"}版本原始碼:產物儲存無法提供該物件

閘道 invoke 錯誤

狀態Detail
404Worker operation not found(raw path 不合法、編碼 %2f/%5c、保留的 /_teamsync/control)、Department Worker not found(沒有 active worker)
414Worker request path exceeds gateway limits、Worker request query exceeds gateway limits
400Worker request query is invalid
413Worker request body exceeds 1 MiB
503Deployed department Worker release is unavailable、Department Worker gateway is unavailable
upstream部門 Worker 自己的狀態碼/body 原樣穿透(回應上限 5 MiB)

部署票證 error_code 值

dispatch_not_accepted · outbox_payload_invalid · artifact_integrity_failed · deployment_retryable_internal · deployment_internal_error · deployment_reconciliation_unavailable · retry_exhausted · retry_transport_unavailable · provider_bundle_mismatch · provider_settlement_lost · cloudflare_upload_uncertain · cloudflare_response_invalid · cloudflare_upload_rejected · cloudflare_rate_limited · cloudflare_reconcile_unavailable · cloudflare_reconcile_invalid · cloudflare_reconcile_rejected · cloudflare_config_invalid · script_name_invalid · bundle_digest_invalid · compatibility_date_invalid · artifact_unavailable · worker_readiness_timeout(uncertain:回讀吻合,但就緒輪詢在一次失敗的 access_policy.get 探測後用盡了 600 秒截止點 — 後端 5.22.0 之前為 60 秒)· department_deleted · edge_workers_provider_invalid · legacy_serving_target_unavailable · deployment_target_unavailable · deployment_target_release_changed

  • department_deleted — failed:部署還在排隊時,部門已被刪除。在取得租約之後、上傳任何東西之前檢查,所以已刪除部門的 Worker 不會被復活;修訂版的 error_message 維持 deployment failed,Worker 狀態回到 active(或 draft)。
  • edge_workers_provider_invalid — failed(若修訂版已是 deploying,也就是 reconcile,則為 uncertain):EDGE_WORKERS_PROVIDER 不是可用的 provider 值。
  • legacy_serving_target_unavailable — failed:票證是由早於 5.22.0 的後端排入、在升級之後才被處理(新 Worker 的第一次部署也包括在內),而無法證明它原本的 Worker 位置就是目前服務該 Worker 的位置。這次嘗試沒有呼叫 provider,Worker 狀態回到 active(或 draft)。請再部署一次;若被 409 worker_serving_target_unavailable 拒絕,平台維運者必須先驗證該 Worker 的位置。
  • deployment_target_unavailable 與 deployment_target_release_changed — failed(reconcile 時為 uncertain):部署任務無法依票證上記錄的服務位置建出它的 provider 用戶端,原因是該位置不是此環境會執行的位置,或是記錄的 release digest 與修訂版的不同。這次嘗試沒有呼叫 provider(reconcile 時,較早的嘗試可能已經上傳過)。
  • 在 v2.6 以上的 release 上部署 builder 政策早於 v2.6 的 release,會先清除所有 Worker 機密。若清除未被確認,或 Worker 或其現行 release 在期間改變,票證以 artifact_integrity_failed 結算為 failed;清除期間的閘道錯誤則以 deployment_internal_error 結算為 failed。此時尚未上傳任何東西。

僅地端(EDGE_WORKERS_PROVIDER=onprem;Worker 主機用戶端的代碼,見地端 Edge Workers):

代碼結果
edge_host_fenced備份圍欄擋住啟用期間,票證維持 pending;不計入嘗試次數
edge_host_release_put_failed、edge_host_host_busy、edge_host_host_maintenance可重試
edge_host_config_invalid、edge_host_release_digest_mismatch、edge_host_compatibility_date_invalid、edge_host_compatibility_date_unsupported、edge_host_release_too_large、edge_host_release_invalid、edge_host_release_missing、edge_host_script_retired、edge_host_storage_exceeded終態 failed(上傳時的 422 會變成 edge_host_ 加上主機的代碼;啟用時的 422 是 edge_host_release_invalid)
edge_host_capacity_exhausted終態 failed:主機已達 Worker 容量上限;修訂版的 error_message 是固定的指引文字 The host's Worker capacity is reached; re-run setup with a larger --edge-workers-max
edge_host_activate_uncertain、edge_host_fence_divergeduncertain:啟用回覆遺失,且 90 秒回讀無法證明該 release

控制面稽核通道另有:control_receipt_not_found · control_receipt_invalid · control_receipt_unavailable · control_audit_payload_invalid · control_receipt_ack_failed · revision_conflict · provider_outcome_unknown · legacy_serving_target_unavailable(自後端 5.22.0 起:不帶已記錄之服務位置的控制回執 — 在該版本之前排入,或為由舊有位置服務的 Worker 排入 — 其所在的 Worker 位置無法對應到 Worker 目前的位置;該意圖結算為 failed,或其確認停止重試);Durable Object 的帶代碼拒絕會以拒絕本身的代碼把意圖結算為 failed(worker_wide_key_legacy_only、secret_limit_exceeded、secret_size_exceeded、service_account_limit_exceeded、operation_not_found)。Worker 已退役的控制意圖或回執不會再重試:其 outbox 列結束為 cancelled,或以 worker_retired 停止重試,且不寫稽核列。清理通道:cleanup_payload_invalid · artifact_cleanup_failed · submission_not_committed。部署回收會把 Worker 列已不存在(公司硬刪除)的排隊部署,以 worker_deleted 結算為 failed。

builder 拒絕代碼

透過 HTTP,每個不可重試的 builder 拒絕看起來都一樣: 422 {"detail": [{"loc": ["body", "project"], "msg": "project failed the locked Worker build policy", "type": "project_invalid"}]}。下面列的精確代碼不會出現在回應中。空的壓縮檔是 422 project_archive_required,超過 2 MiB 的是 413,兩者都在 builder 執行之前就回應。代碼只會在本機印出:teamsync-worker validate|pack|submit|dev|generate 結尾會印 teamsync_worker_failed:authoritative builder rejected project: <code>。用同一個後端提供的 CLI(GET /starters/cli.tgz)執行 validate,就能看到上傳為何被拒。

可重試的 builder 失敗是 503 並帶代碼 body:internal_build_error 與 approved_dependency_unavailable 呈現為 builder_unavailable;無法解析或不一致的 builder 回答是 builder_invalid_output。建置成功後後端會重新驗證 manifest:這裡失敗是 422 manifest_v2_invalid。

來自 edge/department-workers/scripts/build.mjs 超過 100 個代碼,分組:

  • 壓縮檔:project_archive_invalid、project_archive_not_deterministic、project_archive_duplicate_path、project_archive_path_invalid、project_archive_non_regular_file、project_archive_limits_exceeded、project_file_size_invalid、project_file_type_forbidden、project_prebuilt_artifact_forbidden、project_required_file_missing、project_identity_mismatch、project_archive_file_invalid
  • Manifest:manifest_version_unsupported、manifest_invalid、manifest_encoding_invalid、manifest_unknown_field、manifest_module_invalid/_unknown_field、manifest_language_invalid、manifest_entrypoint_invalid/_missing/_language_mismatch、manifest_compatibility_date_invalid、manifest_api_invalid/_unknown_field、manifest_tags_invalid、manifest_tag_*(duplicate、invalid、unknown_field、unreferenced)、manifest_operations_invalid、manifest_operation_invalid、manifest_operation_*(id_invalid、summary_invalid、description_invalid、tag_unknown、tags_invalid、unknown_field)、manifest_method_invalid、manifest_route_invalid/_reserved/_ambiguous、manifest_parameter_*(duplicate、invalid、header_reserved、unknown_field)、manifest_path_parameter_invalid、manifest_query_parameter_invalid、manifest_request_body_invalid/_unknown_field、manifest_responses_invalid、manifest_response_invalid/_body_forbidden/_unknown_field、manifest_schema_invalid/_unknown_field、manifest_schemas_invalid、manifest_number_invalid、manifest_json_invalid、manifest_unicode_invalid、manifest_file_invalid
  • Example:manifest_example_json_invalid、_limits_exceeded、_nul_forbidden、_number_invalid、_integer_unsafe、_schema_invalid、_schema_mismatch、_secret_forbidden、_secret_field_forbidden
  • 靜態資料:static_data_encoding_invalid、_file_size_invalid、_integer_unsafe、_json_invalid、_json_limits_exceeded、_limits_exceeded、_nul_forbidden、_secret_forbidden、_secret_field_forbidden
  • 套件:package_json_invalid/_field_forbidden、package_dependencies_invalid、package_dependency_not_approved、package_lock_invalid/_field_forbidden/_graph_invalid、tsconfig_invalid/_field_forbidden
  • 原始碼:source_encoding_invalid、source_import_forbidden/_not_found/_ambiguous、source_reference_forbidden、source_dynamic_code_forbidden、source_dynamic_import_forbidden、source_dependency_not_declared/_not_approved、source_build_failed
  • Bundle:bundle_size_invalid、bundle_dynamic_code_forbidden、bundle_policy_invalid
  • builder 內部(以 503 builder_unavailable 呈現、可重試):internal_build_error、approved_dependency_unavailable;builder 自己的參數與輸出路徑檢查另有 arguments_invalid、output_already_exists、output_path_invalid

dispatcher 與 runtime 錯誤代碼({code, message, requestId} 外層)

通道狀態 + 代碼
dispatcher,簽章401 invalid_dispatch_assertion — 每種拒絕原因都是同一個 body,包括格式錯誤的 limits 或 serving_target claim(11 種明確拒絕代碼只在日誌,第 11 種是 invalid_serving_target;非預期的驗證失敗使用獨立的 fallback verification_failed);409 serving_target_mismatch(“Serving target changed”:斷言的 serving_target claim 與該 script 的啟用不符,或指名了正值 epoch 卻沒有任何啟用。自後端 5.22.0 起,後端對已記錄服務位置的 Worker,會在其簽章呼叫上送出該 claim,所以 /worker/invoke/… 的呼叫端通常只會短暫遇到這個 409,也就是在 Worker 的位置正被變更時 — 請重試;若持續發生,告知平台維運者);503 dispatcher_unavailable(設定錯誤;上限變數不合法只在斷言沒帶 limits 時才算)
dispatcher,兩者404 not_found(沒有調度介面)、404 worker_not_found(見下)、429 worker_limit_exceeded(CPU/子請求上限)、502 worker_execution_failed
dispatcher,公開405 method_not_allowed、414 request_query_too_large、400 request_query_invalid、413 request_body_invalid
runtime(生成的 router)404 operation_not_found、405 method_not_allowed(+Allow)、401/403 access_denied(依匹配到的操作之有效政策准入 — 只有其模式是純 api_key 時才是 401)、403 operation_settings_pending(“Forbidden”;僅公開通道:此 release 的逐操作設定尚未寫入,所以該通道 fail closed,未匹配的路徑與錯誤的方法也一樣)、403 worker_retired(“Forbidden”;兩條通道,在路由比對之前:部門已刪除,Worker 已被鎖定)、503 migration_fenced(“Worker migration in progress”;兩條通道,在退役檢查之前:平台搬移該 Worker 期間它被凍結,見搬移 Worker)、401 dispatch_context_invalid、503 release_generation_mismatch(“Worker release unavailable”)、503 worker_unavailable(儲存 stub,或讀不到呼叫狀態)、500 worker_contract_error(缺 handler/非 Response)、500 worker_execution_failed(handler 丟例外)、409 revision_conflict(控制 CAS)、409 migration_fenced(被凍結 Worker 的控制通道;後端把它對映成該路由慣用的修訂版過期 409,服務帳號詳細資料路由則對映成 503 Department Worker service-account credentials are unavailable;重設憑證回 200 並帶 delivery: "failed")、409 worker_wide_key_legacy_only / secret_limit_exceeded / service_account_limit_exceeded 與 413 secret_size_exceeded(控制拒絕,由後端如上對映)、422 control_request_invalid

worker_not_found 來自兩種情況:dispatcher 在所有綁定位置都找不到該 script(或被釘選的位置沒有它),以及退役 Worker 的墓碑 — 墓碑對每個路徑都以同一種外層回 404。Worker 自己丟出訊息為 Worker not found 的錯誤不是 404:而是 502 worker_execution_failed。正在被刪除的部門,其呼叫者可能短暫看到 403 worker_retired,之後從墓碑看到 404 worker_not_found。

地端主機用同一個外層回答:503 worker_unavailable(Worker 正在啟動或切換,且超過了暫留請求的上限或 EDGE_HOST_HOLD_MS,或它被隔離、或因超過儲存預算而被停止)、502 worker_execution_failed(Worker 行程連不上)、404 worker_not_found(已退役、未知或從未啟用)、以及呼叫超過牆鐘預算(EDGE_HOST_INVOCATION_TIMEOUT_MS,預設 30 秒;沒有逐次呼叫的 CPU 上限)時的 429 worker_limit_exceeded。地端的子請求池是在 Worker 自己的 fetch() 內丟出例外:沒被捕捉時就是 500 worker_execution_failed。見限制一覽。

沒有 Outbound Worker:部門 Worker 自己的 fetch() 永遠不會被攔截或改寫,所以在雲端 runtime 上,平台會發出的唯一網路相關錯誤是呼叫超過子請求或 CPU 上限時的 429 worker_limit_exceeded — 預設 500/50 ms:簽章通道用斷言的 limits claim,公開通道用 dispatcher 的 EDGE_WORKER_SUBREQUESTS/EDGE_WORKER_CPU_MS(限制一覽)。目的地回什麼,handler 就看到什麼。原始 TCP connect() 在兩種 runtime 上都根本到不了 runtime:匯入 cloudflare:sockets 會在建置時以 source_import_forbidden 被拒絕。

回應 header x-teamsync-request-id 攜帶一個貫穿 dispatcher → runtime → 用戶端的關聯 UUID;兩側日誌都是以同一 id 為鍵的結構化 JSON,永不包含 claims、header、body 或金鑰材料。Worker 產生的回應也可能帶有 x-teamsync-serving-namespace 與 x-teamsync-routing-epoch:這是 dispatcher 設定(並覆寫)的平台診斷用 header,Worker 程式碼無法設定,用戶端不應解析或依賴它們。

Last updated on