← Cloudflare R2 / r2 / api
Коды ошибок
Эта страница описывает коды ошибок, возвращаемые R2 при использовании API Workers или S3-совместимый API, а также рекомендуемые исправления для устранения неполадок.
Как возвращаются ошибки
Для API Workers, операции R2 выбрасывают исключения, которые можно перехватить. Код ошибки указывается в конце message свойство:
try {
await env.MY_BUCKET.put("my-key", data, { customMetadata: largeMetadata });
} catch (error) {
console.error(error.message);
// "put: Your metadata headers exceed the maximum allowed metadata size. (10012)"
}Для S3-совместимый API, ошибки возвращаются в виде XML в теле ответа:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
</Error>Справочник кодов ошибок
Ошибки аутентификации и авторизации
| Код ошибки | Код S3 | HTTP-статус | Подробности | Рекомендуемое решение |
|---|---|---|---|---|
| 10002 | Unauthorized | 401 | Отсутствуют или недействительны учётные данные для аутентификации. | Проверьте свой API-токен или учетные данные ключа доступа верны и не истекли. |
| 10003 | AccessDenied | 403 | Недостаточно прав для выполнения запрошенной операции. | Проверьте, что ваш API-токен имеет необходимые разрешения для бакета и операции. |
| 10018 | ExpiredRequest | 403 | Срок действия presigned URL или подписи запроса истёк. | Обновите presigned URL или подпись. |
| 10035 | SignatureDoesNotMatch | 403 | Подпись запроса не совпадает с вычисленной подписью. | Проверьте секретный ключ и алгоритм подписи. Убедитесь в отсутствии проблем с кодированием URL. |
| 10042 | NotEntitled | 403 | У аккаунта нет доступа к этой функции. | Убедитесь, что в вашем аккаунте есть Подписка R2. |
Ошибки бакета
| Код ошибки | Код S3 | HTTP-статус | Подробности | Рекомендуемое решение |
|---|---|---|---|---|
| 10005 | InvalidBucketName | 400 | Bucket name does not meet naming requirements. | Bucket names must be 3-63 chars, lowercase alphanumeric and hyphens, start/end with alphanumeric. |
| 10006 | NoSuchBucket | 404 | Указанный бакет не существует. | Убедитесь, что имя бакета указано верно и бакет существует в вашем аккаунте. |
| 10008 | BucketNotEmpty | 409 | Невозможно удалить бакет, содержащий объекты. | Перед удалением бакета удалите все объекты в нём. |
| 10009 | TooManyBuckets | 400 | Превышен лимит бакетов аккаунта (по умолчанию: 1,000,000 бакетов). | Запросите увеличение лимита через Форма запроса на увеличение лимитов ↗. |
| 10073 | BucketConflict | 409 | Bucket name already exists. | Выберите другое имя бакета. Имена бакетов должны быть уникальными в пределах вашего аккаунта. |
Ошибки объектов
| Код ошибки | Код S3 | HTTP-статус | Подробности | Рекомендуемое решение |
|---|---|---|---|---|
| 10007 | NoSuchKey | 404 | Указанный ключ объекта не существует. Для API Workers, get() и head() возвращать null вместо генерации исключения. |
Убедитесь, что ключ объекта указан верно и объект не был удалён. |
| 10020 | InvalidObjectName | 400 | Ключ объекта содержит недопустимые символы или слишком длинный. | Используйте допустимые символы UTF-8. Максимальная длина ключа: 1024 байта. |
| 100100 | EntityTooLarge | 400 | Объект превышает максимальный размер (5 ГиБ для одиночной загрузки, 5 ТиБ для составной). | Используйте составная загрузка для объектов размером более 5 GiB. Максимальный размер объекта составляет 5 TiB. |
| 10012 | MetadataTooLarge | 400 | Пользовательские метаданные превышают лимит в 8,192 байта. | Уменьшите размер пользовательских метаданных. Максимальный суммарный размер всех пользовательских метаданных: 8,192 байт. |
| 10069 | ObjectLockedByBucketPolicy | 403 | Объект защищён правилом блокировки бакета, поэтому его нельзя изменить или удалить. | Дождитесь окончания срока хранения. См. блокировки бакета. |
Ошибки загрузки и запросов
| Код ошибки | Код S3 | HTTP-статус | Подробности | Рекомендуемое решение |
|---|---|---|---|---|
| 10033 | MissingContentLength | 411 | Content-Length заголовок обязателен, но отсутствует. |
Включите Content-Length заголовок в запросах PUT/POST. |
| 10013 | IncompleteBody | 400 | Request body terminated before expected Content-Length. |
Убедитесь, что тело запроса передаётся полностью. Проверьте, не было ли обрывов сети или тайм-аутов на стороне клиента. |
| 10014 | InvalidDigest | 400 | Неверный формат заголовка контрольной суммы. | Убедитесь, что контрольные суммы закодированы корректно (base64 для контрольных сумм SHA/CRC). |
| 10037 | BadDigest | 400 | Указанная контрольная сумма не совпадает с загруженным содержимым. | Проверьте целостность данных и повторите загрузку. |
| 10039 | InvalidRange | 416 | Запрошенный диапазон байтов не может быть удовлетворён. | Убедитесь, что начало диапазона меньше размера объекта. Проверьте Range формат заголовка. |
| 10031 | PreconditionFailed | 412 | Условные заголовки (If-Match, If-Unmodified-Since, и т. д.) не были выполнены. |
ETag или время изменения объекта не соответствуют указанному условию. Запросите объект заново и повторите попытку. Подробнее см. условные операции. |
Ошибки составной загрузки
| Код ошибки | Код S3 | HTTP-статус | Подробности | Рекомендуемое решение |
|---|---|---|---|---|
| 10011 | EntityTooSmall | 400 | Часть составной загрузки меньше минимального размера (5 MiB), за исключением последней части. | Убедитесь, что размер каждой части (кроме последней) составляет не менее 5 МиБ. |
| 10024 | NoSuchUpload | 404 | Составная загрузка не существует или была прервана. | Проверьте uploadId верно. По умолчанию незавершённые составные загрузки истекают через 7 дней. См. жизненные циклы объектов. |
| 10025 | InvalidPart | 400 | При завершении загрузки не удалось найти одну или несколько частей. | Убедитесь, что каждая часть успешно загружена, и используйте точный ETag, возвращённый UploadPart. |
| 10048 | InvalidPart | 400 | Все части, кроме последней, должны быть одинакового размера. | Убедитесь, что все части, кроме последней, имеют одинаковый размер. R2 требует единообразного размера частей при multipart-загрузке. |
Ошибки сервиса
| Код ошибки | Код S3 | HTTP-статус | Подробности | Рекомендуемое решение |
|---|---|---|---|---|
| 10001 | InternalError | 500 | Произошла внутренняя ошибка. | Повторите запрос. Если ошибка сохраняется, проверьте Cloudflare Status ↗ или обратитесь в службу поддержки. |
| 10043 | ServiceUnavailable | 503 | Сервис временно недоступен. | Повторите с экспоненциальной задержкой. Проверьте Cloudflare Status ↗. |
| 10054 | ClientDisconnect | 400 | Клиент отключился до завершения запроса. | Проверьте сетевое подключение и повторите попытку. |
| 10058 | TooManyRequests | 429 | Превышен лимит запросов. Часто возникает из-за нескольких одновременных запросов к одному и тому же ключу объекта (лимит: 1 запись в секунду на ключ). | Проверьте, обращаются ли несколько клиентов к одному и тому же ключу объекта. См. Лимиты R2. |