Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
В ответ на вызовы API клиентское приложение получает HTTP-статус 502 Bad Gateway с кодом ошибки protocol.http.TooBigHeaders .
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 502 Bad Gateway
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"response headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Возможные причины
Эта ошибка возникает, если общий размер заголовков, отправляемых целевым/бэкэнд-сервером в Apigee Edge в составе HTTP-ответа, превышает допустимый лимит в Apigee Edge .
Вот возможные причины этой ошибки:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
|---|---|---|
| Размер заголовков в ответе превышает допустимый предел. | Размер заголовка отдельного элемента или сумма размеров всех заголовков, отправленных целевым/бэкэнд-сервером в составе HTTP-ответа на Apigee Edge, превышает допустимый предел в Apigee Edge . | Пользователи публичных и частных облачных сервисов на периферии сети |
Общие этапы диагностики
Для диагностики этой ошибки воспользуйтесь одним из следующих инструментов/методов:
Мониторинг API
Для диагностики ошибки с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge под учетной записью пользователя с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите расследовать проблему.

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

Ниже вы увидите информацию о коде ошибки
protocol.http.TooBigHeaders:( Посмотреть увеличенное изображение )

Нажмите «Просмотреть журналы» и разверните строку с неудачным запросом.
( Посмотреть увеличенное изображение )

- В окне «Журналы» обратите внимание на следующие сведения:
- Код состояния:
502 - Источник неисправности:
target - Код ошибки:
protocol.http.TooBigHeaders.
- Код состояния:
- Если в поле Fault Source указано значение
target, а в поле Fault Code — значениеprotocol.http.TooBigHeaders, это означает, что HTTP-ответ от целевого/бэкэнд-сервера содержит заголовки, размер которых превышает допустимый лимит в Apigee Edge .
инструмент трассировки
- Включите сеанс трассировки и выполните одно из следующих действий:
- Дождитесь появления ошибки
502 Bad Gateway, или - Если вы можете воспроизвести проблему, выполните вызов API и воспроизведите ошибку
502 Bad Gateway.
- Дождитесь появления ошибки
- Выберите один из запросов, завершившихся неудачей, и изучите трассировку.
- Проследите за различными этапами трассировки и определите место возникновения сбоя.
Как правило, эта ошибка отображается в потоке с именем Error сразу после этапа отправки запроса на целевой сервер, как показано ниже:
( Посмотреть увеличенное изображение )

Обратите внимание на значения ошибки из трассировки:
- Ошибка:
response headers size exceeding 25,600 - error.class :
com.apigee.errors.http.server.BadGateway
Это указывает на то, что Apigee Edge (компонент обработки сообщений) выдает ошибку сразу после получения ответа от бэкэнд-сервера из-за превышения допустимого размера заголовка.
- Ошибка:
В сообщении об ошибке, отправленном Apigee Edge клиенту , вы увидите следующее:
( Посмотреть увеличенное изображение )

- Обратите внимание на значения ошибки из трассировки. Приведенный выше пример трассировки показывает:
- Ошибка:
502 Bad Gateway. - Содержимое ошибки:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Ошибка:
Перейдите к этапу AX (Analytics Data Recorded) в трассировке и щелкните по нему, чтобы просмотреть соответствующие подробности.
( Посмотреть увеличенное изображение )

Обратите внимание на значение следующих величин:
Заголовки ошибок Ценить X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetСодержимое сообщения об ошибке: Тело сообщения {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
Для диагностики ошибки с помощью журналов доступа NGINX:
- Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибке HTTP
502 Bad Gateway. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logГде: ORG , ENV и PORT# заменяются фактическими значениями.
- Выполните поиск, чтобы проверить наличие ошибок
502с кодом ошибкиprotocol.http.TooBigHeadersза определенный период времени (если проблема возникала ранее) или если какие-либо запросы по-прежнему завершаются с ошибкой502. Если вы обнаружите ошибки
502с кодом X-Apigee-fault-code, соответствующим значениюprotocol.http.TooBigHeaders, определите значение X-Apigee-fault-source.Пример ошибки 502 из журнала доступа NGINX:

Приведенная выше запись из журнала доступа NGINX содержит следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ошибок Ценить X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source target
Причина: Размер заголовков в ответе превышает допустимый лимит.
Диагноз
- Определите код ошибки , источник ошибки и размер полезной нагрузки ответа для обнаруженной ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
- Если в поле Fault Source указано значение
target, это означает, что ответ, отправленный целевым/бэкэнд-сервером в Apigee, содержит заголовки, размер которых превышает допустимый лимит в Apigee Edge . - Проверить, превышают ли заголовки ответа от целевого/бэкенд-сервера допустимый лимит, можно одним из следующих способов:
Сообщение об ошибке
Для проверки используйте сообщение об ошибке:
Если у вас есть доступ к полному сообщению об ошибке, полученному от Apigee Edge, обратитесь к
faultstring).faultstringуказывает на то, что размер заголовка ответа превысил допустимый предел.Пример сообщения об ошибке:
"faultstring":"response headers size exceeding 25,600"
В приведенном выше сообщении об ошибке обратите внимание на
faultstring, указывающую на то, что ответ содержит заголовки, общий размер которых превышает допустимый лимит .Фактический запрос
Для проверки с использованием фактического запроса:
Если у вас есть доступ к фактическому запросу, отправленному на целевой/бэкэнд-сервер, выполните следующие шаги:
- Если вы являетесь пользователем публичного/частного облака , отправьте запрос непосредственно на бэкэнд-сервер с самого бэкэнд-сервера или с любой другой машины, с которой вам разрешено отправлять запросы на бэкэнд-сервер.
- Если вы являетесь пользователем частного облака , вы также можете отправить запрос на бэкэнд-сервер через один из обработчиков сообщений.
- Проанализируйте ответ, полученный от бэкэнд-сервера, и, в частности, вычислите и проверьте общий размер заголовков, переданных в ответе.
Если вы обнаружите, что размер заголовков в полезной нагрузке ответа превышает допустимый лимит в Apigee Edge , то это и является причиной проблемы.
Пример ответа от целевого сервера:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactВ приведенном выше примере заголовки
Testheader1иTestheader2имеют больший размер, что и является причиной этой ошибки, поскольку превышает допустимый предел в Apigee Edge .
Журналы обработчика сообщений
Для проверки с использованием журналов обработчика сообщений:
Если вы используете частное облако, то можете использовать журналы обработчика сообщений, чтобы проверить, не превысил ли размер заголовков ответа допустимый лимит в Apigee Edge .
Проверьте журналы обработчика сообщений:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Выполните поиск, чтобы проверить наличие ошибок
502за определенный период времени (если проблема возникала ранее) или наличие запросов, которые по-прежнему завершаются с ошибкой502Вы можете использовать следующую поисковую строку:grep -ri "response headers size exceeding"
- В файле
system.logвы найдете строки, похожие на следующие. Размер заголовков ответа в вашем случае может отличаться:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
Как только обработчик сообщений получает ответ от бэкэнда/целевого сервера и обнаруживает, что общий размер заголовков превышает 25 КБ, он останавливается и выдает ошибку:
response headers size exceeding 25,600Это означает, что общий размер заголовков превышает 25 КБ, и Apigee выдает ошибку, когда размер начинает превышать лимит в 25 КБ, с кодом ошибки
protocol.http.TooBigHeaders
Разрешение
Фиксированный размер
Вариант №1 [Рекомендуется]: Исправлена ошибка, из-за которой целевое серверное приложение не отправляло заголовки размером, превышающим лимит Apigee.
- Проанализируйте причину, по которой конкретный целевой сервер отправляет ответ с размером заголовка, превышающим допустимый предел, определенный в разделе «Пределы» .
- Если это нежелательно, измените ваше серверное приложение таким образом, чтобы оно отправляло заголовки ответа, размер которых меньше допустимого предела в Apigee Edge .
- Проверьте, можно ли передать информацию заголовка в составе тела ответа.
- По возможности, отправляйте весь объем информации, который вы планировали передать, в заголовке тела ответа. Это гарантирует, что вы не превысите лимит заголовков ответа.
CwC
Вариант №2: Используйте свойство CwC для увеличения лимита размера заголовка ответа.
Apigee предоставляет свойство CwC , позволяющее увеличить лимит размера заголовков ответа. Подробности см. в разделе «Настройка ограничений для обработчика сообщений».
Пределы
Apigee ожидает, что клиентское приложение и серверная часть не будут отправлять заголовки размером больше допустимого предела, указанного в документации по размеру заголовков запроса/ответа в разделе «Ограничения Apigee Edge» .
- Если вы используете публичное облако , то максимальный предел размера заголовков запроса и ответа указан в разделе «Ограничения Apigee Edge» для размера заголовков запроса/ответа .
- Если вы используете частное облако, то, возможно, изменили максимальное ограничение по умолчанию для размера заголовков запроса и ответа (хотя это и не рекомендуется). Вы можете определить максимальное ограничение размера заголовков ответа, следуя инструкциям в разделе «Как проверить текущее ограничение» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство HTTPResponse.headers.limit было обновлено новым значением в обработчиках сообщений.
- На машине обработчика сообщений найдите свойство
HTTPResponse.headers.limitв каталоге/opt/apigee/edge-message-processor/confи проверьте, какое значение установлено, как показано ниже:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Пример результата выполнения приведенной выше команды выглядит следующим образом:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
В приведенном выше примере обратите внимание, что свойство
HTTPResponse.headers.limitвhttp.propertiesустановлено со значением25k.Это означает, что ограничение на размер полезной нагрузки ответа, настроенное в Apigee для частного облака, составляет 25 КБ.
Если вам по-прежнему нужна помощь службы поддержки Apigee, перейдите по ссылке «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию.
Соберите следующую диагностическую информацию, а затем свяжитесь со службой поддержки Apigee Edge :
Если вы являетесь пользователем публичного облака , предоставьте следующую информацию:
- Название организации
- Название среды
- Имя API-прокси
- Полная команда
curl, использованная для воспроизведения ошибки502 - Файл трассировки для запросов API
- Полный вывод ответа от целевого/бэкенд-сервера, включая размер заголовков.
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, полученное для неудачных запросов.
- Название организации
- Название среды
- Пакет API-прокси
- Файл трассировки для неудачных запросов API
- Полная команда
curl, использованная для воспроизведения ошибки502 - Полный вывод ответа от целевого/бэкенд-сервера, включая размер заголовков.
Журналы доступа 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