Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
В ответ на вызовы API клиентское приложение получает HTTP-статус 413 Request Entity Too Large с кодом ошибки protocol.http.TooBigBody .
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 413 Request Entity Too Large
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"Body buffer overflow",
"detail":{
"errorcode":"protocol.http.TooBigBody"
}
}
}Возможные причины
Эта ошибка возникает, если размер полезной нагрузки, отправляемой клиентским приложением в Apigee Edge в рамках HTTP-запроса, превышает допустимый лимит в Apigee Edge .
Вот возможные причины этой ошибки:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
|---|---|---|
| Размер запрашиваемой полезной нагрузки превышает допустимый предел. | Размер полезной нагрузки, отправляемой клиентским приложением в рамках HTTP-запроса к Apigee Edge, превышает допустимый лимит в Apigee Edge. | Пользователи публичных и частных облачных сервисов на периферии сети |
| Размер запрошенной полезной нагрузки превышает допустимый предел после декомпрессии. | Размер полезной нагрузки, отправляемой клиентским приложением в сжатом формате в рамках HTTP-запроса к Apigee Edge, превышает допустимый предел при распаковке Apigee Edge. | Пользователи публичных и частных облачных сервисов на периферии сети |
Общие этапы диагностики
Для диагностики этой ошибки воспользуйтесь одним из следующих инструментов/методов:
Мониторинг API
Для диагностики ошибки с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge под учетной записью пользователя с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите расследовать проблему.

- Перейдите на страницу Анализ > Мониторинг API > Исследование .
- Выберите конкретный временной промежуток, в течение которого вы наблюдали ошибки.
- Для сужения круга поиска кода ошибки можно выбрать фильтр «Прокси» .
- Постройте график зависимости кода ошибки от времени .
Выберите ячейку, в которой указан код ошибки
protocol.http.TooBigBodyи код состояния413как показано ниже:
Информация о коде ошибки
protocol.http.TooBigBodyотображается следующим образом:
- Нажмите «Просмотреть журналы» и разверните строку с неудачным запросом. Затем в окне «Журналы» запишите подробности, как показано ниже:
Несжатый
Сценарий №1: Запрос отправляется в несжатом виде.

В окне «Журналы» обратите внимание на следующие сведения:
- Код состояния:
413 - Источник ошибки:
proxy - Код ошибки:
protocol.http.TooBigBody. - Длина запроса (байты):
15360440(~15 МБ)
Если в поле Fault Source указано значение
proxy, в поле Fault Code — значениеprotocol.http.TooBigBody, а Request Length превышает 10 МБ, это означает, что размер полезной нагрузки HTTP-запроса от клиента превышает допустимый лимит в Apigee .Сжатый
Сценарий №2: Запрос отправляется в сжатом виде.

В окне «Журналы» обратите внимание на следующие сведения:
- Код состояния:
413 - Источник ошибки:
proxy - Код ошибки:
protocol.http.TooBigBody. - Длина запроса (байты):
15264(~15 кБ)
Если в поле Fault Source указано значение
proxy, в поле Fault Code — значениеprotocol.http.TooBigBody, а Request Length — менее 10 МБ, это означает, что размер полезной нагрузки HTTP-запроса от клиента в сжатом формате меньше допустимого предела, но в несжатом виде Apigee превышает допустимый предел. - Код состояния:
След
Для диагностики ошибки с помощью инструмента трассировки:
- Включите сеанс трассировки и либо
- Дождитесь появления ошибки
413 Request Entity Too Largeили - Если вы можете воспроизвести проблему, выполните вызов API и воспроизведите ошибку
413 Request Entity Too Large
- Дождитесь появления ошибки
Убедитесь, что параметр «Показать всю информацию о потоке» включен.

- Выберите один из запросов, завершившихся неудачей, и изучите трассировку.
- Перейдите к этапу «Запрос получен от клиента».
Несжатый
Сценарий №1: Запрос отправляется в несжатом виде.

Обратите внимание на следующую информацию:
- Content-Encoding: отсутствует
- Content-Length:
15360204
Сжатый
Сценарий №2: Запрос отправляется в сжатом виде.

Обратите внимание на следующую информацию:
- Content-Encoding:
gzip - Content-Length:
14969 - Content-Type:
application/x-gzip
- Проследите за различными этапами трассировки и определите место возникновения сбоя.
Как правило, ошибка возникает после этапа "Запрос получен от клиента" , как показано ниже:

- Обратите внимание на значение ошибки из трассировки. Приведенный выше пример трассировки показывает:
- Ошибка:
Body buffer overflow - error.class:
com.apigee.errors.http.user.RequestTooLarge
- Ошибка:
Перейдите к разделу «Отправленный клиенту ответ» и запишите значения ошибки из трассировки. Пример трассировки ниже показывает:
- Ошибка:
413 Request Entity Too Large - Содержимое ошибки:
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}

- Ошибка:
- Перейдите к этапу AX (Analytics Data Recorded) в трассировке и щелкните по нему.
В разделе «Подробности этапа» прокрутите вниз до пункта «Считываемые переменные» .

- Определите значение переменной client.received.content.length, которое указывает на следующее:
- Фактический размер полезной нагрузки запроса при отправке в несжатом формате и
- Размер полезной нагрузки запроса после декомпрессии Apigee, когда полезная нагрузка отправляется в сжатом формате, всегда будет равен значению допустимого лимита (10 МБ) в этом сценарии.
Несжатый
Сценарий №1: Запрос полезной нагрузки в несжатом виде.

переменная client.received.content.length:
15360204Сжатый
Сценарий №2: Запрос полезной нагрузки в сжатом формате.

переменная client.received.content.length:
10489856 - В следующей таблице объясняется, почему Apigee возвращает ошибку
413в двух сценариях в зависимости от значения переменной client.received.content.length :Сценарий Значение client.received.content.length Причина неудачи Запрос полезной нагрузки в несжатом формате ~15 МБ Размер > допустимого предела в 10 МБ. Запрос полезной нагрузки в сжатом формате ~10 МБ При декомпрессии превышен предельный размер.
NGINX
Для диагностики ошибки с помощью журналов доступа NGINX:
- Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибках HTTP
413. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log- Выполните поиск, чтобы проверить наличие ошибок
413за определенный период времени (если проблема возникала ранее) или наличие запросов, которые по-прежнему завершаются с ошибкой413. - Если вы обнаружите ошибки
413с кодом X-Apigee-fault-code, соответствующим значениюprotocol.http.TooBigBody, определите значение X-Apigee-fault-source.Несжатый
Сценарий №1: Запрос размера полезной нагрузки в несжатом формате.

Приведенная выше запись из журнала доступа NGINX содержит следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответа Ценить X-Apigee-fault-code protocol.http.TooBigBodyX-Apigee-fault-source policyОбратите внимание на длину запроса:
15360440(14,6 МБ > допустимого предела)Сжатый
Сценарий №2: Запрос размера полезной нагрузки в сжатом формате.

Приведенная выше запись из журнала доступа NGINX содержит следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответа Ценить X-Apigee-fault-code protocol.http.TooBigBodyX-Apigee-fault-source policyОбратите внимание на длину запроса:
15264(14,9 КБ < допустимого предела).В этом сценарии Apigee Edge возвращает
413даже если длина запроса меньше допустимого предела, поскольку запрос мог быть отправлен в сжатом формате, и размер полезной нагрузки превышает лимит при распаковке Apigee Edge.
Причина: Размер запрашиваемой полезной нагрузки превышает допустимый предел.
Диагноз
- Определите код ошибки , источник ошибки и размер полезной нагрузки запроса для обнаруженной ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики для сценария № 1 (несжатый)».
- Если источник ошибки имеет значение
policyилиproxy, это означает, что размер полезной нагрузки запроса, отправляемого клиентским приложением в Apigee, превышает допустимый лимит в Apigee Edge . - Проверьте размер полезной нагрузки запроса , определенный на шаге №1.
- Если размер полезной нагрузки превышает допустимый лимит в 10 МБ, то это и является причиной ошибки.
- Если размер полезной нагрузки < 10 МБ допустимого предела, возможно, запрашиваемая полезная нагрузка передана в сжатом формате. См. раздел «Причина: Размер полезной нагрузки запроса превышает допустимый предел после распаковки».
- Вы также можете проверить, действительно ли размер полезной нагрузки запроса превышает допустимый лимит в 10 МБ, проверив сам запрос, выполнив следующие шаги:
- Если у вас нет доступа к фактическому запросу, отправленному клиентским приложением, перейдите в раздел «Решение» .
- Если у вас есть доступ к фактическому запросу, отправленному клиентским приложением, выполните следующие действия:
- Проверьте размер полезной нагрузки, передаваемой в запросе.
- Если вы обнаружите, что размер полезной нагрузки превышает допустимый лимит в Apigee Edge , то это и есть причина проблемы.
Пример запроса:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
В приведенном выше примере размер файла
test15mbfileсоставляет примерно 15 МБ. Если вы используете другой клиент, получите логи клиента, чтобы узнать размер отправляемой полезной нагрузки.
Разрешение
Перейдите в раздел «Решение» .
Причина: Размер запрошенной полезной нагрузки превышает допустимый предел после декомпрессии.
Если полезная нагрузка запроса отправлена в сжатом формате и заголовок запроса Content-Encoding установлен в значение gzip , Apigee выполняет декомпрессию полезной нагрузки запроса. В процессе декомпрессии, если Apigee обнаружит, что размер полезной нагрузки превышает 10 МБ (допустимый предел) , дальнейшая декомпрессия прекращается, и система немедленно отправляет ответ с кодом ошибки 413 Request Entity Too Large и кодом ошибки protocol.http.TooBigBody .
Диагноз
- Определите код ошибки, источник ошибки . и размер полезной нагрузки запроса для ошибки, обнаруженной с помощью мониторинга API, инструмента трассировки или журналов доступа NGINX, как описано в разделе «Общие шаги диагностики» для сценария № 2 (сжатый).
- Если в качестве источника ошибки указано значение
policyилиproxy, это означает, что размер полезной нагрузки запроса, отправляемого клиентским приложением в Apigee, превышает допустимый лимит в Apigee Edge. - Проверьте размер полезной нагрузки запроса , определенный на шаге 1 .
- Если размер полезной нагрузки превышает допустимый лимит в 10 МБ, то это и является причиной ошибки.
- Если размер полезной нагрузки меньше допустимого предела в 10 МБ, то возможно, что запрос передается в сжатом формате. В этом случае проверьте размер несжатой полезной нагрузки запроса.
- Проверить, был ли запрос от клиента отправлен в сжатом формате и превысил ли размер несжатого файла допустимый лимит, можно одним из следующих способов:
След
Для проверки с помощью инструмента Trace:
- Если вы получили трассировку для неудачного запроса, обратитесь к шагам, подробно описанным в разделе «Трассировка и...».
- Определите значение переменной client.received.content.length
- Проверьте, содержал ли запрос от клиента заголовок Content-Encoding:
gzip
- Если значение переменной client.received.content.length превышает 10 МБ, допустимый лимит и заголовок запроса Content-Encoding:
gzip, то это и является причиной данной ошибки.
Фактический запрос
Для проверки с использованием фактического запроса:
- Если у вас нет доступа к фактическому запросу, отправленному клиентским приложением, перейдите в раздел «Решение» .
- Если у вас есть доступ к фактическому запросу, отправленному клиентским приложением, выполните следующие действия:
- Проверьте размер передаваемых в запросе данных, а также заголовок
Content-Encodingотправленный в запросе. Проверьте, не превышает ли несжатый размер полезной нагрузки допустимый предел в Apigee Edge.
Пример запроса:
curl https://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile.gz -H "Content-Encoding: gzip" -v
В приведенном выше случае размер файла
test15mbfile.gzменьше установленного лимита; однако размер несжатого файлаtest15mbfileсоставляет примерно 15 МБ, а заголовокContent-Encoding—gzip.Если вы используете другой клиент, получите логи клиента, чтобы узнать размер отправляемых данных и установить ли заголовок
Content-Encodingзначениеgzip.
- Проверьте размер передаваемых в запросе данных, а также заголовок
Журналы обработчика сообщений
Для проверки с использованием журналов обработчика сообщений:
- Если вы используете частное облако , то можете использовать журналы обработчика сообщений для получения ключевой информации об ошибках HTTP
413. Проверьте журналы обработчика сообщений:
/opt/apigee/var/log/edge-message-processor/logs/system.logВыполните поиск, чтобы проверить наличие ошибок
413за определенный период времени (если проблема возникала ранее) или наличие запросов, которые по-прежнему завершаются с ошибкой413.Вы можете использовать следующие поисковые запросы:
grep -ri "chunkCount"
grep -ri "RequestTooLarge"
- В файле
system.logвы найдете строки, похожие на следующие (TotalReadиchunkCountмогут отличаться в вашем случае):2021-07-06 13:29:57,544 NIOThread@1 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2570 2021-07-06 13:29:57,545 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: com.apigee.errors.http.user.RequestTooLarge : Body buffer overflow
- В процессе декомпрессии, как только обработчик сообщений определит, что общий объем прочитанных байтов превышает 10 МБ, он останавливается и выводит следующую строку:
Message is too large. TotalRead 10489856 chunkCount 2570
Это означает, что размер полезной нагрузки запроса превышает 10 МБ, и Apigee выдает ошибку
RequestTooLargeкогда размер начинает превышать лимит в 10 МБ, с кодом ошибкиprotocol.http.TooBigBody
- Если вы получили трассировку для неудачного запроса, обратитесь к шагам, подробно описанным в разделе «Трассировка и...».
Разрешение
Фиксированный размер
Вариант №1 [Рекомендуется]: Исправить проблему в клиентском приложении, чтобы оно не отправляло данные размером, превышающим допустимый лимит.
- Проанализируйте причину, по которой конкретный клиент отправляет запрос/размер полезной нагрузки, превышающий допустимый лимит, определенный в разделе «Лимиты» .
Если это нежелательно, измените клиентское приложение таким образом, чтобы оно отправляло запросы/полезную нагрузку размером меньше допустимого предела.
В приведенном выше примере проблему можно решить, передав в качестве полезной нагрузки файл меньшего размера, скажем,
test5mbfile(размером 5 МБ), как показано ниже:curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
- Если это необходимо и вы хотите отправить запрос/полезную нагрузку, превышающую допустимый лимит, перейдите к следующим параметрам.
Шаблон подписанного URL
Вариант №2 [Рекомендуется]: Используйте шаблон подписанных URL-адресов в Apigee JavaCallout
Для полезных нагрузок размером более 10 МБ Apigee рекомендует использовать шаблон подписанных URL-адресов в Apigee JavaCallout, как показано в примере Edge Callout: Signed URL Generator на GitHub.
Стриминг
Вариант №3: Использовать потоковую передачу
Если вашему API-прокси необходимо обрабатывать очень большие запросы и/или ответы, вы можете включить потоковую передачу в Apigee.
CwC
Вариант №4: Используйте свойство CwC для увеличения лимита буфера.
Этот параметр следует использовать только в том случае, если вы не можете использовать ни один из рекомендуемых вариантов, поскольку увеличение размера по умолчанию может привести к проблемам с производительностью.
Apigee предоставляет свойство CwC , позволяющее увеличить лимит размера полезной нагрузки запроса и ответа. Подробнее см. раздел «Установка лимита размера сообщения на маршрутизаторе или обработчике сообщений».
Пределы
Apigee ожидает, что клиентское приложение и серверная часть не будут отправлять данные размером, превышающим допустимый лимит, указанный в разделе Request/response size в Apigee Edge Limits .
- Если вы используете публичное облако , то максимальный предел размера полезной нагрузки запроса и ответа указан в разделе
Request/response sizeв документации Apigee Edge Limits . - Если вы используете частное облако, возможно, вы изменили стандартное ограничение на размер полезной нагрузки запроса и ответа (хотя это и не рекомендуется). Вы можете определить максимальный размер полезной нагрузки запроса, следуя инструкциям в разделе «Как проверить текущее ограничение» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство HTTPRequest.body.buffer.limit было обновлено новым значением в обработчиках сообщений.
- На машине обработчика сообщений найдите свойство
HTTPRequest.body.buffer.limitв каталоге/opt/apigee/edge-message- processor/confи проверьте, какое значение установлено, используя следующую команду:grep -ri "HTTPRequest.body.buffer.limit" /opt/apigee/edge-message-processor/conf
- Пример результата выполнения приведенной выше команды выглядит следующим образом:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
В приведенном выше примере обратите внимание, что свойство
HTTPRequest.body.buffer.limitвhttp.propertiesустановлено со значением10m.Это означает, что ограничение на размер полезной нагрузки запроса, настроенное в Apigee for Private Cloud, составляет 10 МБ.
Если вам по-прежнему нужна помощь службы поддержки Apigee, перейдите по ссылке «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию.
Соберите следующую диагностическую информацию, а затем свяжитесь со службой поддержки Apigee Edge :
Если вы являетесь пользователем публичного облака , предоставьте следующую информацию:
- Название организации
- Название среды
- Имя API-прокси
- Полная команда curl, использованная для воспроизведения ошибки
413 - Файл трассировки для запросов API
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, полученное для неудачных запросов.
- Название организации
- Название среды
- Пакет API-прокси
- Файл трассировки для неудачных запросов API
- Полная команда curl, использованная для воспроизведения ошибки
413 Журналы доступа NGINX
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logГде: ORG , ENV и PORT# заменяются фактическими значениями.
- Журналы системы обработки сообщений
/opt/apigee/var/log/edge-message-processor/logs/system.log