Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния HTTP 413 Request Entity Too Large
с кодом ошибки protocol.http.TooBigBody
в качестве ответа на вызовы API.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
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. | Пользователи Edge Public и Private Cloud |
Размер полезных данных запроса превышает допустимый предел после распаковки | Размер полезной нагрузки, отправленной клиентским приложением в сжатом формате как часть HTTP-запроса к Apigee Edge, превышает допустимый предел при распаковке Apigee Edge. | Пользователи Edge Public и Private Cloud |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
API-мониторинг
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge как пользователь с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите изучить проблему.
- Перейдите на страницу Анализ > Мониторинг API > Расследование .
- Выберите конкретный период времени, в течение которого вы наблюдали ошибки.
- Вы можете выбрать прокси- фильтр, чтобы сузить код неисправности.
- Постройте график зависимости кода неисправности от времени .
Выберите ячейку с кодом неисправности
protocol.http.TooBigBody
и кодом состояния413
, как показано ниже:Информация о коде неисправности
protocol.http.TooBigBody
отображается, как показано ниже:- Нажмите «Просмотреть журналы» и разверните строку с невыполненным запросом. Затем в окне «Журналы» обратите внимание на детали, как показано ниже:
Несжатый
Сценарий № 1: Полезные данные запроса отправляются в несжатом виде.
В окне «Журналы» обратите внимание на следующие детали:
- Код состояния:
413
- Источник ошибки:
proxy
- Код ошибки:
protocol.http.TooBigBody
. - Длина запроса (байты):
15360440
(~15 МБ)
Если источник сбоя имеет значение
proxy
, код сбоя имеет значениеprotocol.http.TooBigBody
, а длина запроса превышает 10 МБ, то это указывает на то, что размер полезной нагрузки HTTP-запроса от клиента превышает допустимый предел. в Апигее .Сжатый
Сценарий 2. Полезные данные запроса отправляются в сжатом виде.
В окне «Журналы» обратите внимание на следующие детали:
- Код состояния:
413
- Источник ошибки:
proxy
- Код ошибки:
protocol.http.TooBigBody
. - Длина запроса (байты):
15264
(~15 КБ)
Если источник сбоя имеет значение
proxy
, код сбоя имеет значениеprotocol.http.TooBigBody
, а длина запроса меньше 10 МБ, то это указывает на то, что HTTP-запрос от клиента имеет размер полезных данных запроса ниже разрешенного. предел в сжатом формате, но размер полезных данных превышает допустимый предел при несжатии Apigee. - Код состояния:
След
Чтобы диагностировать ошибку с помощью инструмента трассировки:
- Включите сеанс трассировки и либо
- Дождитесь появления ошибки
413 Request Entity Too Large
или - Если вы можете воспроизвести проблему, выполните вызов API и воспроизведите ошибку
413 Request Entity Too Large
- Дождитесь появления ошибки
Убедитесь, что параметр «Показать всю информацию о потоке» включен.
- Выберите один из неудачных запросов и проверьте трассировку.
- Перейдите к этапу «Запрос получен от клиента».
Несжатый
Сценарий № 1: Полезные данные запроса отправляются в несжатом виде.
Обратите внимание на следующую информацию:
- Кодирование контента: нет
- Длина контента:
15360204
Сжатый
Сценарий 2. Полезные данные запроса отправляются в сжатом виде.
Обратите внимание на следующую информацию:
- Кодировка контента:
gzip
- Длина контента:
14969
- Тип контента:
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 (записанные аналитические данные) в трассировке и щелкните его.
В разделе «Сведения о фазе» прокрутите вниз до пункта «Чтение переменных» .
- Определите значение переменной 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 для определения ключевой информации об ошибках 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-код неисправности protocol.http.TooBigBody
X-Apigee-разлом-источник policy
Обратите внимание на длину запроса:
15360440
(14,6 МБ > допустимого предела).Сжатый
Сценарий 2. Запрос размера полезных данных в сжатом формате.
Приведенный выше пример записи из журнала доступа NGINX имеет следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответов Ценить X-Apigee-код неисправности protocol.http.TooBigBody
X-Apigee-источник-ошибки 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 МБ, возможно, полезные данные запроса передаются в сжатом формате. В этом случае проверьте несжатый размер сжатых полезных данных запроса.
- Вы можете проверить, был ли запрос от клиента отправлен в сжатом формате и размер несжатого файла превышал допустимый предел, используя один из следующих методов:
След
Чтобы проверить с помощью инструмента «Трассировка»:
- Если вы зафиксировали трассировку неудачного запроса, обратитесь к шагам, подробно описанным в разделе Трассировка и
- Определите значение переменной 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 [рекомендуется]: исправить клиентское приложение, чтобы оно не отправляло размер полезных данных, превышающий разрешенный предел.
- Проанализируйте причину, по которой конкретный клиент отправляет запрос/размер полезной нагрузки, превышающий допустимый предел, определенный в Limits .
Если это нежелательно, измените клиентское приложение так, чтобы оно отправляло запрос/размер полезных данных меньше допустимого предела.
В приведенном выше примере вы можете решить проблему, передав полезную нагрузку файла меньшего размера, скажем,
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.
КвК
Вариант № 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
установлено значение10m
вhttp.properties
.Это указывает на то, что ограничение размера полезных данных запроса, настроенное в Apigee для частного облака, составляет 10 МБ.
Если вам по-прежнему нужна помощь со стороны службы поддержки Apigee, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию
Соберите следующую диагностическую информацию, а затем обратитесь в службу поддержки Apigee Edge :
Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя API-прокси
- Полная команда завитка, используемая для воспроизведения ошибки
413
- Файл трассировки запросов API
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, наблюдаемое для неудачных запросов
- Название организации
- Имя среды
- Пакет API-прокси
- Файл трассировки неудачных запросов API
- Полная команда завитка, используемая для воспроизведения ошибки
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