Skip to content

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

エラーレスポンス

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

Cloudflare がリクエストを完了できないとき、エラーレスポンスを生成します。形式は、クライアントが Accept ヘッダーで要求する内容と、ゾーンの Custom Errors 設定によって決まります。

デフォルトのエラーレスポンスは HTML です。構造化形式(application/jsonapplication/problem+jsontext/markdown など)を要求するクライアントには、機械可読なレスポンスが返ります。この機械可読レスポンスは、すべての 1xxx エラーコード(エラーに応じて HTTP 4xx または 5xx を返す)と、Cloudflare が生成する 5xx エラー(500、502、504、520-526)を対象にします。オリジンサーバーが生成した 5xx エラーのレスポンスは、Cloudflare がクライアントへそのまま渡し、この仕組みの対象外です。


コンテンツネゴシエーション

Cloudflare は、標準の HTTP コンテンツネゴシエーション に従い、クライアントの Accept ヘッダーでレスポンス形式を選びます。複数の形式が受け入れ可能なときは、品質係数(q 値)で優先順位を決めます。同じ品質値なら、先に書いた型が採用されます。

送信する Accept ヘッダー レスポンス形式
application/json JSON(application/json; charset=utf-8
application/problem+json JSON(application/problem+json; charset=utf-8
application/json, text/markdown;q=0.9 JSON(品質係数が高い)
text/markdown Markdown(text/markdown; charset=utf-8
text/markdown, application/json Markdown(品質が同じなので、先に書いた方が採用されます)
text/* Markdown
text/html HTML
*/* HTML
未設定 HTML

構造化エラーレスポンスは、Free プランを含むすべてのプランで利用できます。これらのレスポンスを上書きする Custom Error Rules には、Cloudflare の有料プランが必要です。


Custom Errors との関係

構造化エラーレスポンスは、カスタムエラー設定がないゾーンのデフォルトです。 Custom Errors を使うゾーンでは、クライアントへ返す内容をすべて制御できます。

クライアントが受け取る内容は、ゾーンに設定したカスタムエラー機能によって変わります。詳細は次の各節を参照してください。

カスタムエラーページなし、カスタムエラールールなし

ほとんどのゾーンのデフォルトです。Cloudflare は、クライアントが要求した形式でデフォルトのエラーレスポンスを返します。

クライアントの送信 レスポンス
Accept: application/json Cloudflare のデフォルトの構造化 JSON レスポンス
Accept: text/markdown Cloudflare のデフォルトの構造化 Markdown レスポンス
Accept: text/html Cloudflare のデフォルト HTML エラーページ
Accept ヘッダーなし Cloudflare のデフォルト HTML エラーページ

Error Page あり、カスタムエラールールなし

ゾーンに、Cloudflare ダッシュボードからアップロードした Error Page があります。Custom Error Rules は未設定です。Error Page は Accept ヘッダーに関係なく、すべてのクライアントへ返されます。Error Pages はコンテンツネゴシエーションを行いません。

クライアントの送信 レスポンス
Accept: application/json カスタム HTML エラーページ
Accept: text/markdown カスタム HTML エラーページ
Accept: text/html カスタム HTML エラーページ
Accept ヘッダーなし カスタム HTML エラーページ

エージェントには構造化レスポンスを返しつつ、ブラウザーにはカスタム HTML を残したい場合は、Accept ヘッダーにマッチする Custom Error Rule を追加します。詳細は次の節を参照してください。

Custom Error Rules あり

ゾーンに 1 つ以上の Custom Error Rules があります(有料プランで利用できます)。これらは Error Pages より優先されます。返す内容、対象、条件は自分で制御します。

クライアントの送信 レスポンス
Accept: application/json Custom Error Rule にマッチした場合は、そのルールの内容が返ります。マッチしない場合は、Error Page(設定済みなら)または構造化 JSON レスポンスにフォールバックします。
Accept: text/markdown Custom Error Rule にマッチした場合は、そのルールの内容が返ります。マッチしない場合は、Error Page(設定済みなら)または構造化 Markdown レスポンスにフォールバックします。
Accept: text/html Custom Error Rule にマッチした場合は、そのルールの内容が返ります。マッチしない場合は、Error Page またはデフォルト HTML にフォールバックします。
Accept ヘッダーなし 同じフォールバックチェーン

Custom Error Rules は Accept を含む任意のリクエストヘッダーにマッチでき、特定のエラーコードを対象にできます。同じゾーンから、API クライアントには JSON、エージェントには Markdown、ブラウザーには HTML を返せます。

例: 522 エラーで API クライアントにカスタム JSON を返す

この Custom Error Rule は、クライアントが JSON を要求する 522 エラーにマッチします。

Expression: (http.response.code eq 522) and (any(http.request.headers["accept"][*] contains "application/json"))

Action: 独自のエラー形式でカスタム JSON レスポンスを返します。

このルールは、デフォルトの構造化 JSON レスポンスと、設定済みの Error Page の両方より優先されます。ルールにマッチしないクライアント(例: HTML を要求するブラウザー)は、Error Page または Cloudflare のデフォルトレスポンスへフォールスルーします。

例: エージェントには構造化レスポンス、ブラウザーにはカスタム HTML を返す

ゾーンに Error Page がある場合、JSON や Markdown を要求するエージェントを含む、すべてのクライアントへそのページが返ります。エージェントに Cloudflare のデフォルト構造化レスポンスを返すには、Error Page を削除します。Error Page がなければ、Cloudflare は Accept ヘッダーを自動で尊重します。エージェントには構造化 JSON または Markdown、ブラウザーには HTML が返ります。

Error Page をブラウザー向けに残しつつ、エージェントには独自の構造化内容を返したい場合は、Accept ヘッダーにマッチする Custom Error Rules を作成し、独自の JSON または Markdown を返します。どちらのルールにもマッチしないブラウザーは、引き続きカスタム HTML Error Page を受け取ります。

優先順位

Cloudflare がエラーレスポンスを生成するとき、クライアントが受け取る内容は次の優先順位で決まります。

  1. Custom Error Rules — ルールがエラーとリクエスト条件にマッチすれば、そのルールの内容が返ります。
  2. Error Pages — エラータイプ向けの Error Page があり、Custom Error Rule にマッチしなければ、Accept ヘッダーに関係なく Error Page が HTML として返ります。
  3. 構造化エラーレスポンス — Custom Error Rule にマッチせず、Error Page もなければ、Cloudflare はクライアントが要求した形式(JSON、Markdown、または HTML)でデフォルトレスポンスを返します。

アカウントレベルとゾーンレベルのルール、WAF のカスタムブロックレスポンス、セキュリティチャレンジページを含む全体の優先順位は、Custom Errors のドキュメントを参照してください。


JSON: 522 Connection timed out

{
	"type": "https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-522/",
	"title": "Error 522: Connection timed out",
	"status": 522,
	"detail": "Cloudflare could not establish a TCP connection to the origin server. The TCP handshake timed out, which may indicate the origin is overloaded, firewalling Cloudflare, or unreachable at the network level.",
	"instance": "9f140b785e57c458",
	"error_code": 522,
	"error_name": "connection_timeout",
	"error_category": "origin",
	"ray_id": "9f140b785e57c458",
	"timestamp": "2026-04-24T09:22:40Z",
	"zone": "example.com",
	"cloudflare_error": true,
	"retryable": true,
	"retry_after": 120,
	"owner_action_required": true,
	"what_you_should_do": "**Wait and retry.** Back off for at least 120 seconds. If the error persists, the website operator should verify firewall rules and ensure the origin accepts connections from Cloudflare IP ranges.",
	"footer": "This error was generated by Cloudflare on behalf of the website owner."
}

Markdown: 522 Connection timed out

---
error_code: 522
error_name: connection_timeout
error_category: origin
status: 522
ray_id: 9f140b785e57c458
timestamp: 2026-04-24T09:22:40Z
zone: example.com
cloudflare_error: true
retryable: true
retry_after: 120
owner_action_required: true
---

# Error 522: Connection timed out

## What Happened

Cloudflare could not establish a TCP connection to the origin server. The TCP handshake timed out, which may indicate the origin is overloaded, firewalling Cloudflare, or unreachable at the network level.

## What You Should Do

**Wait and retry.** Back off for at least 120 seconds. If the error persists, the website operator should verify firewall rules and ensure the origin accepts connections from Cloudflare IP ranges.

---

This error was generated by Cloudflare on behalf of the website owner.

構造化エラーレスポンスをテストする

522 エラーの構造化 JSON レスポンスを取得します。

curl --silent --compressed --header "Accept: application/json" \
  --user-agent "TestAgent/1.0" --header "Accept-Encoding: gzip, deflate" \
  "https://example.com/cdn-cgi/error/522" | jq .

構造化 Markdown レスポンスを取得します。

curl --silent --compressed --header "Accept: text/markdown" \
  --user-agent "TestAgent/1.0" --header "Accept-Encoding: gzip, deflate" \
  "https://example.com/cdn-cgi/error/522"

再試行可能なエラーの Retry-After ヘッダーを確認します。

curl --silent --compressed --dump-header - --output /dev/null \
  --header "Accept: application/json" --user-agent "TestAgent/1.0" \
  --header "Accept-Encoding: gzip, deflate" \
  "https://example.com/cdn-cgi/error/521" | grep -i retry-after

レスポンスフィールド

JSON と Markdown のレスポンスは、同じフィールドセットを含みます。JSON はフラットなオブジェクトとして返し、Markdown は YAML frontmatter のあとに本文セクションを置きます。次のフィールド定義は両方の形式に適用されます。

JSON レスポンスは RFC 9457(Problem Details for HTTP APIs) に従います。Problem Details を理解する任意の HTTP クライアントは、Cloudflare 固有のコードなしで、標準の 5 メンバー(typetitlestatusdetailinstance)をパースできます。

RFC 9457 の標準メンバー

フィールド 説明
type string このエラーコードの Cloudflare ドキュメントを指す URI です。
title string 短い要約です。例: "Error 522: Connection timed out"
status integer レスポンスの HTTP ステータスコードです。
detail string 何が起きたか、どの当事者の責任かを説明するプレーンテキストです。
instance string このエラー発生を識別する Ray ID です。

Cloudflare の拡張メンバー

フィールド 説明
error_code integer Cloudflare のエラーコードです(例: 5221015)。
error_name string snake_case の機械可読名です(例: connection_timeoutrate_limited)。安定しており、プログラムでのマッチに適します。
error_category string 障害の分類です。エラーカテゴリ を参照してください。安定しており、プログラムでのマッチに適します。
ray_id string instance と同じ値です。既存の Cloudflare ツールとの互換性のために含まれます。
timestamp string エラー生成時刻の ISO 8601 タイムスタンプです。
zone string リクエストされたホスト名です。
cloudflare_error boolean 常に true です。このエラーがオリジンではなく Cloudflare によって生成されたことを示します。
retryable boolean 一時的なエラーであり、リクエストを再試行できるかどうかです。
retry_after integer または null 再試行までの待機秒数です。retryabletrue のときだけ存在します。Retry-After HTTP ヘッダーの値と一致します。
owner_action_required boolean エラー解消のためにサイト運営者が対応する必要があるかどうかです。
what_you_should_do string クライアント向けの次の手順です。再試行の可否と、誰が問題を直せるかを示します。
footer string 帰属を示す行です。

Markdown 固有の構造

Markdown レスポンスは、これらのフィールドを YAML frontmatter(--- 区切り)に置き、そのあとに 3 つの本文セクションを続けます。

  • # Error {code}: {description} — エラーコードと短い説明の見出しです。
  • ## What Happeneddetail フィールドに対応します。
  • ## What You Should Dowhat_you_should_do フィールドに対応します。

frontmatter は、RFC 9457 の標準メンバー(typetitleinstance)と footer フィールドを省略します。本文と重複するか、Markdown 形式では不要なためです。


エラーカテゴリ

error_category フィールドは障害を分類します。クライアントは本文フィールドをパースせずに、再試行とエスカレーションの動きを振り分けられます。

5xx エラーカテゴリ

カテゴリ コード 意味 再試行
origin 502、504、520-524 オリジンサーバー側の責任です。一時的なインフラ障害です。 はい。retry_after でバックオフします。
cloudflare 500 Cloudflare 内部エラーです。オリジンは必ずしも関与していません。 はい。短い再試行(30 秒)です。
ssl 525、526 オリジンの TLS 設定が壊れています(ハンドシェイク失敗または無効な証明書)。 いいえ。運営者が TLS 設定を直すまで、再試行しても解消しません。

1xxx エラーカテゴリ

カテゴリ 意味 コードの例
access_denied IP ブロック、国ブロック、ファイアウォールルール 1005、1006、1007、1008、1010、1012、1106-1109
rate_limit レート制限 1015、1025、1027、1200
dns DNS 解決エラー 1001、1016
config ゾーンまたはオリジンの設定エラー 1004、1014、1033、1043、1047、1049
tls クライアント TLS エラー(バージョン、暗号、証明書) 1017、1028、1029、1044
legal 法的制限(DMCA、国ブロック) 1026、1039
worker Worker スクリプトエラー 1042、1100、1101、1102、1103、1104、1105
rewrite URL リライトルールのエラー 1036、1037
snippet Snippet の設定エラー 1201、1202、1203、1204、1205、1206
unsupported 未対応の機能またはプロトコル 1045

Retry-After ヘッダー

再試行可能なエラーコードには、標準の Retry-After HTTP レスポンスヘッダーが付きます。ヘッダーの秒数は、レスポンス本文の retry_after フィールドと一致します。

5xx の Retry-After 値

コード retry_after(秒)
500 30
502 60
504 120
520 60
521 120
522 120
523 120
524 120
525 なし(再試行不可)
526 なし(再試行不可)

再試行不可のコード(525、526)には Retry-After ヘッダーは付きません。

1xxx の Retry-After 値

再試行可能な 1xxx エラーコードのうち、Retry-After を返すのは次の 6 つです。

コード retry_after(秒) エラー名
1004 120 DNS 解決エラー
1015 30 レート制限
1033 120 Argo Tunnel エラー
1038 60 HTTP ヘッダー数の上限超過
1200 60 キャッシュ接続数の上限
1205 5 リダイレクトが多すぎます

その他の 1xxx エラーコードは再試行不可で、Retry-After ヘッダーは付きません。

WAF のレート制限ルールが、レスポンスに動的な Retry-After 値をすでに設定している場合は、その値がデフォルトより優先されます。


関連リソース

役に立ちましたか?