Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
В ответ на вызовы API клиентское приложение получает HTTP-статус 502 Bad Gateway с кодом ошибки protocol.http.TooBigLine .
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 502 Bad Gateway
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}Возможные причины
Эта ошибка возникает, если размер строки ответа (Response-Line) , отправляемой целевым/бэкэнд-сервером в Apigee Edge в составе HTTP-ответа, превышает максимально допустимый предел в Apigee Edge .
Прежде чем рассматривать возможные причины этой ошибки, давайте разберемся, что означает Response-Line и как проверить его размер.
Понимание работы службы поддержки Response-Line
Типичный HTTP-ответ состоит из трех частей:
- Строка статуса (в Apigee называется строкой ответа )
- (Набор HTTP-заголовков)
- [ Тело ]
Ответная линия состоит из трех частей: версия протокола , за которой следует числовой код состояния и соответствующая ему текстовая фраза, как показано ниже:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Когда целевое/бэкенд-приложение отправляет HTTP-ответ, первая отправляемая строка представляет собой строку ответа, как описано выше. За ней следуют заголовки и тело/полезная нагрузка ответа. На следующем скриншоте показан типичный запрос curl , часть запроса и часть ответа (вместе со строкой ответа).

Понимание размера линии ответа
В приведенном выше примере начальная строка (первая строка) ответа, также называемая строкой ответа, выглядит следующим образом:
HTTP/1.1 200 OK
Размер этой строки ответа составляет примерно
~15 bytesпоскольку она содержит15 ASCII characters. Так как это находится в пределах допустимого лимита в Apigee Edge , ответ отправляется клиенту без каких-либо ошибок со стороны Apigee Edge.- Аналогично, если вы посмотрите на
faultstringв приведенном выше сообщении об ошибке , она содержит"response line size exceeding 2,048". Это указывает на то, что строка ответа в HTTP- ответе, отправленном целевым/бэкэнд-сервером, превысила 2048 байт.
Понимание работы крупных линий реагирования
Согласно определению строки состояния (здесь она называется строкой ответа ) и типичным HTTP-запросам и ответам, размер будет значительно меньше установленного по умолчанию лимита в 2 КБ в Apigee Edge, поэтому мы, возможно, не достигнем этого предела. Однако вот несколько возможных сценариев, в которых вы можете превысить этот лимит:
- Целевой/бэкэнд-сервер не является HTTP-системой. Он может отвечать не по протоколу HTTP.
- На целевом/бэкэнд-сервере возникли проблемы, и он отправляет длинную строку ответа в составе HTTP-ответа.
Подробнее об этом читайте в статье «Получение ошибки protocol.http.TooBigLine, "размер строки ответа превышает 2048 .
Вот возможные причины ошибки:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
|---|---|---|
| Ответ: Размер строки превышает допустимый предел. | Размер строки ответа (Response-Line) , отправляемой целевым/бэкенд-сервером в составе HTTP-ответа Apigee Edge, превышает допустимый лимит в Apigee Edge. | Пользователи публичных и частных облачных сервисов на периферии сети |
Общие этапы диагностики
Для диагностики этой ошибки воспользуйтесь одним из следующих инструментов/методов:
Мониторинг API
Для диагностики ошибки с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge под учетной записью пользователя с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите расследовать проблему.

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

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

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

- В окне «Журналы» обратите внимание на следующие сведения:
- Код состояния:
502 - Источник неисправности:
target - Код ошибки:
protocol.http.TooBigLine.
- Код состояния:
- Если в поле "Источник ошибки" указано значение
target, а в поле " Код ошибки" - значениеprotocol.http.TooBigLine, это означает, что размер строки ответа HTTP-ответа от целевого/бэкэнд-сервера превышает максимально допустимый предел в Apigee Edge .
инструмент трассировки
- Включите сеанс трассировки и выполните одно из следующих действий:
- Дождитесь появления ошибки
502 Bad Gateway. - Если вы можете воспроизвести проблему, выполните вызов API и воспроизведите ошибку
502 Bad Gateway.
- Дождитесь появления ошибки
- Выберите один из запросов, завершившихся неудачей, и изучите трассировку.
- Проследите за различными этапами трассировки и определите место возникновения сбоя.
Как правило, ошибка отображается в файле
flowinfoError сразу после этапа отправки запроса на целевой сервер , как показано ниже:
Обратите внимание на значения ошибки из трассировки:
- ошибка:
response line exceeding 2,048 - error.class :
com.apigee.errors.http.server.BadGateway
Это указывает на то, что Apigee Edge (компонент обработки сообщений) выдает ошибку, как только получает ответ от бэкэнд-сервера, из-за превышения допустимого предела размера строки ответа.
- ошибка:
Сообщение об ошибке, отправленное клиенту на этапе «Отправка ответа клиенту», будет показано ниже:
( Посмотреть увеличенное изображение )

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

Обратите внимание на значение следующих величин:
Заголовки запроса Ценить X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetСодержимое сообщения об ошибке: Тело сообщения {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
Для диагностики ошибки с помощью журналов доступа NGINX:
- Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибках HTTP
502. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logГде: ORG , ENV и PORT# заменяются фактическими значениями.
- Выполните поиск, чтобы проверить наличие ошибок
502за определенный период времени (если проблема возникала ранее) или наличие запросов, которые по-прежнему завершаются с ошибкой502. Если вы обнаружите ошибки
502с кодом X-Apigee-fault-code, соответствующим значениюprotocol.http.TooBigLine, определите значение X-Apigee-fault-source.
Приведенная выше запись из журнала доступа NGINX содержит следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответа Ценить X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source target
Причина: Размер строки ответа превышает допустимый предел.
Диагноз
- Определите код ошибки и источник ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
- Если в поле Fault Source указано значение
target, это означает, что размер строки ответа, отправляемой целевым/бэкэнд-сервером в Apigee, превышает допустимый предел в Apigee Edge . Проверить, превысил ли размер строки ответа допустимый лимит в 2 КБ, можно одним из следующих способов:
Сообщение об ошибке
Для проверки используйте сообщение об ошибке:
Если у вас есть доступ к полному сообщению об ошибке, полученному от Apigee Edge, обратитесь к
faultstring).Пример сообщения об ошибке:
"faultstring":"response line size exceeding 2,048"
Приведенная выше
faultstringуказывает на то, что размер строки ответа превысил допустимый предел в 2 КБ.Фактический запрос
Для проверки с использованием фактического запроса:
Если у вас есть доступ к фактическому запросу, отправленному целевому/бэкэнд-серверу, выполните следующие шаги:
- Проверьте размер линии ответа.
- Если вы обнаружите, что размер URI превышает допустимый лимит в Apigee Edge , то это и есть причина проблемы.
Пример ответа от целевого/бэкэнд-сервера:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
В приведенном выше случае строка ответа
HTTP/1.1 200 1111…<trimmed>...11111111превышает 2 КБ, то есть содержит более 2 000 символов ASCII.Если вы используете другой клиент, вы можете просмотреть журналы клиента и попытаться определить размер строки ответа, отправляемой в Apigee Edge.
Журналы обработчика сообщений
Для проверки с использованием журналов обработчика сообщений:
Если вы используете частное облако , то можете использовать журналы обработчика сообщений, чтобы проверить, не превысил ли размер строки ответа допустимый лимит в Apigee Edge .
- Определите идентификатор сообщения неудачного запроса, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
Найдите идентификатор сообщения в журнале обработчика сообщений:
/opt/apigee/var/log/edge-message-processor/logs/system.logВ файле
system.logвы найдете строки, похожие на следующие:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
Текстовое
message = response line size exceeding 2,048в приведенном выше сообщении об ошибке указывает на то, что размер строки ответа превышает 2 КБ. Поэтому Apigee Edge генерирует исключение и возвращает клиентским приложениям код состояния502с кодом ошибкиprotocol.http.TooBigline.
Разрешение
Фиксированный размер
Вариант №1 [Рекомендуется]: Исправлена ошибка, из-за которой целевое/бэкэнд-серверное приложение не отправляло строки ответа размером, превышающим допустимый лимит.
- Проанализируйте причину, по которой конкретный клиент отправляет ответную строку размером, превышающим допустимый лимит, определенный в разделе «Лимиты» .
- Если это нежелательно, измените целевое/бэкэнд-серверное приложение таким образом, чтобы оно отправляло строку ответа размером меньше допустимого предела.
- Если это необходимо и вы хотите отправить ответное сообщение размером больше допустимого лимита, перейдите к следующим параметрам.
CwC
Вариант №2: Используйте свойство CwC для увеличения лимита Response-Line.
Apigee предоставляет свойство CwC , позволяющее увеличить ограничение на размер строки ответа. Подробнее см. раздел «Установка ограничения на размер строки ответа в обработчике сообщений» .
Пределы
Apigee ожидает, что клиентское приложение и серверная часть не будут отправлять строки запроса/ответа, размер которых превышает допустимый лимит, указанный в разделе « Ограничения строк запроса/ответа» в документации Apigee Edge Limits .
- Если вы используете публичное облако , то максимальный предел размера строки запроса и ответа указан в разделе «Ограничения Apigee Edge» для размера строки запроса/ответа .
- Если вы используете частное облако, то, возможно, изменили максимальное значение по умолчанию для размера строки запроса и строки ответа (хотя это и не рекомендуется). Вы можете определить максимальное значение размера строки ответа, следуя инструкциям в разделе «Как проверить текущее ограничение» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство HTTPResponse.line.limit было обновлено новым значением в обработчиках сообщений.
- На машине обработчика сообщений найдите свойство
HTTPResponse.line.limitв каталоге/opt/apigee/edge-message-processor/confи проверьте, какое значение установлено, как показано ниже:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- Пример результата выполнения приведенной выше команды выглядит следующим образом:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
В приведенном выше примере обратите внимание, что свойство
HTTPResponse.line.limitв файлеhttp.propertiesустановлено со значением2k.Это означает, что ограничение на размер строки ответа, настроенное в Apigee для частного облака, составляет 2 КБ.
Если вам по-прежнему нужна помощь службы поддержки 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