INTEGRITY Документация

Ответы с ошибками

Когда Cloudflare не может выполнить запрос, она формирует ответ с ошибкой. Формат зависит от того, что запрашивает клиент через Accept заголовке, а также в настройках зоны Custom Errors конфигурации.

По умолчанию ответы об ошибках возвращаются в формате HTML. Клиенты, запрашивающие структурированный формат (например, application/json, application/problem+json, или text/markdown) получают вместо этого машиночитаемый ответ. Этот машиночитаемый ответ охватывает все Коды ошибок 1xxx (которые возвращают коды состояния HTTP 4xx или 5xx в зависимости от ошибки) и созданные Cloudflare Ошибки 5xx (500, 502, 504, 520-526). Ответы с ошибками 5xx, которые генерирует исходный сервер, Cloudflare передаёт клиенту без изменений.


Согласование содержимого

Cloudflare выбирает формат ответа на основе клиентского Accept заголовок, следуя стандартным Согласование содержимого HTTP. Если допустимо несколько форматов, используются коэффициенты качества (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 Стандартный структурированный JSON-ответ Cloudflare
Accept: text/markdown Стандартный структурированный Markdown-ответ Cloudflare
Accept: text/html Стандартная HTML-страница ошибки Cloudflare
Нет Accept заголовок Стандартная HTML-страница ошибки Cloudflare

Настроена страница ошибки, пользовательские правила ошибок отсутствуют

В зоне загружена Error Page через дашборд Cloudflare. Пользовательские правила ошибок (Custom Error Rules) не настроены. Error Page отображается всем клиентам независимо от Accept заголовок. Error Pages не выполняют согласование содержимого.

Клиент отправляет Ответ
Accept: application/json Ваша пользовательская страница ошибки HTML
Accept: text/markdown Ваша пользовательская страница ошибки HTML
Accept: text/html Ваша пользовательская страница ошибки HTML
Нет Accept заголовок Ваша пользовательская страница ошибки HTML

Если вы хотите, чтобы агенты получали структурированные ответы, сохранив при этом собственный HTML для браузеров, добавьте Custom Error Rule, соответствующее Accept заголовок. Подробности см. в следующем разделе.

Настроенные Custom Error Rules

В зоне есть одно или несколько 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, и может ориентироваться на конкретные коды ошибок. В рамках одной и той же зоны вы можете отдавать JSON API-клиентам, Markdown агентам и HTML браузерам.

Пример: отдавать собственный JSON клиентам API при ошибке 522

Это пользовательское правило ошибок (Custom Error Rule) соответствует ошибкам 522, когда клиент запрашивает JSON:

Выражение: (http.response.code eq 522) and (any(http.request.headers["accept"][*] contains "application/json"))

Действие: Предоставьте собственный 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 для браузеров, но при этом отдавать агентам собственный структурированный контент, создайте Custom Error Rules, соответствующие Accept заголовок и предоставлять собственный контент в формате JSON или Markdown. Браузеры, которые не соответствуют ни одному из правил, продолжают получать вашу пользовательскую HTML-страницу ошибки.

Порядок приоритета

Когда Cloudflare формирует ответ с ошибкой, то, что получит клиент, определяется следующим порядком приоритета:

  1. Custom Error Rules : Если правило соответствует условиям ошибки и запроса, отдаётся содержимое этого правила.
  2. Error Pages : Если для данного типа ошибки настроена Error Page и ни одно Custom Error Rule не совпало, Error Page отдаётся в формате HTML независимо от Accept заголовок.
  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.

Тестирование структурированных ответов об ошибках

Получите структурированный JSON-ответ для ошибки 522:

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 они располагаются во frontmatter YAML, за которым следуют текстовые разделы. Приведённые ниже описания полей относятся к обоим форматам.

Ответы в формате JSON соответствуют RFC 9457 (Problem Details for HTTP APIs). Любой HTTP клиент, поддерживающий Problem Details, может разобрать пять стандартных полей (type, title, status, detail, instance) без специфичного для Cloudflare кода.

Участники стандарта RFC 9457

Поле Тип Описание
type string URI, указывающий на документацию Cloudflare по этому коду ошибки.
title string Краткое описание, например, "Error 522: Connection timed out".
status целое число Код состояния HTTP-ответа.
detail string Текстовое объяснение того, что пошло не так и какая сторона несёт ответственность.
instance string Ray ID, идентифицирующий данный конкретный случай ошибки.

Участники расширения Cloudflare

Поле Тип Описание
error_code целое число Код ошибки Cloudflare (например, 522, 1015).
error_name string Машиночитаемое имя в snake_case (например, connection_timeout, rate_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 or null Количество секунд ожидания перед повторной попыткой. Указывается только если retryable это true. Соответствует Retry-After значение HTTP-заголовка.
owner_action_required boolean Требуются ли от владельца сайта действия для устранения ошибки.
what_you_should_do string Практические рекомендации для клиента: что делать дальше, стоит ли повторить попытку и кто может устранить проблему.
footer string Строка атрибуции.

Структура, специфичная для Markdown

Ответы в формате Markdown размещают эти поля в YAML frontmatter (между --- разделители), а затем три текстовых раздела:

Frontmatter не включает стандартные поля RFC 9457 (type, title, instance) и footer поле, поскольку они либо дублируют текстовое описание, либо неприменимы к формату Markdown.


Категории ошибок

error_category поле классифицирует ошибку, чтобы клиенты могли определять поведение при повторных попытках и эскалации, не разбирая текстовые поля.

Категории кодов ошибок 5xx

Категория Коды Значение Повторить?
origin 502, 504, 520-524 Проблема на стороне исходного сервера. Временный сбой инфраструктуры. Да. Используйте задержку с помощью retry_after.
cloudflare 500 Cloudflare столкнулся с внутренней ошибкой. Исходный сервер не обязательно был к этому причастен. Да. Короткая повторная попытка (30 с).
ssl 525, 526 Конфигурация TLS исходного сервера повреждена (сбой 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 Ошибки конфигурации Snippets 1201, 1202, 1203, 1204, 1205, 1206
unsupported Неподдерживаемые функции или протоколы 1045

Заголовок Retry-After

К повторяемым кодам ошибок относится стандартный Retry-After заголовка HTTP-ответа. Значение заголовка в секундах совпадает со значением retry_after поле в теле ответа.

Значения Retry-After для кодов 5xx

Код retry_after (в секундах)
500 30
502 60
504 120
520 60
521 120
522 120
523 120
524 120
525 N/A (not retryable)
526 N/A (not retryable)

Коды, для которых повтор не выполняется (525, 526), не включают Retry-After заголовок.

Значения Retry-After для кодов 1xxx

Шесть повторяемых кодов ошибок 1xxx создают Retry-After:

Код retry_after (в секундах) Имя ошибки
1004 120 Ошибка разрешения DNS
1015 30 Ограничено по скорости
1033 120 Ошибка Argo Tunnel
1038 60 Превышен лимит заголовков HTTP
1200 60 Лимит соединений для кеша
1205 5 Слишком много перенаправлений

Все остальные коды ошибок 1xxx не подлежат повторной попытке и не содержат Retry-After заголовок.

Если правило ограничения частоты запросов WAF уже установило динамический Retry-After значение в ответе, это значение имеет приоритет над значением по умолчанию.


Дополнительные ресурсы