Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
В ответ на вызовы API клиентское приложение получает HTTP-статус 414 Request-URI Too Long с кодом ошибки protocol.http.TooBigLine .
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 414 Request-URI Too Long
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"request line size exceeding 7,168",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
} Обратите внимание, что faultstring в приведенном выше сообщении содержит допустимый лимит для строки запроса в Apigee Edge, который составляет 7168 bytes (7 КБ).
Возможные причины
Эта ошибка возникает, если размер строки запроса , отправляемой клиентским приложением в Apigee Edge в рамках HTTP-запроса, превышает допустимый лимит в Apigee Edge .
Прежде чем рассматривать возможные причины этой ошибки, давайте разберемся, что означает строка запроса и как проверить ее размер.
Понимание линии запросов
Типичный HTTP-запрос состоит из трех частей:
- Линия запросов
- (Набор HTTP-заголовков)
- [ Тело ]
Строка запроса состоит из трех частей, как показано ниже.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Когда клиентское приложение отправляет HTTP-запрос на сервер, первая строка, поступающая на сервер, содержит описанную выше строку запроса (Request-Line) . За ней следуют заголовки и тело/полезная нагрузка запроса.
На следующем скриншоте показан типичный запрос curl : часть запроса (вместе с Request-Line) и часть ответа .

Понимание размера строки запроса
- В приведенном выше примере начальная строка запроса, также называемая строкой запроса , выглядит следующим образом:
GET /test/ HTTP/1.1
Размер строки запроса составляет
~19 bytesпоскольку она содержит19 ASCII characters. Так как это находится в пределах допустимого лимита в Apigee Edge , запрос обрабатывается без ошибок, и вы получаете успешный ответ. - Аналогично, если вы посмотрите на
faultstringв приведенном выше сообщении об ошибке , она содержит"request line size exceeding 7,168". Это указывает на то, что строка запроса в HTTP-запросе, отправленном клиентом, превысила 7168 байт.
Вот возможные причины этой ошибки:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
|---|---|---|
| Размер запрашиваемой полезной нагрузки превышает допустимый предел. | Размер Request-URI, отправляемого клиентским приложением в рамках HTTP-запроса к Apigee Edge, превышает допустимый лимит в Apigee Edge . | Пользователи публичных и частных облачных сервисов на периферии сети |
Общие этапы диагностики
Для диагностики этой ошибки воспользуйтесь одним из следующих инструментов/методов:
Мониторинг API
Для диагностики ошибки с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge под учетной записью пользователя с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите расследовать проблему.

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

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

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

В окне «Журналы» обратите внимание на следующие сведения:
- Код состояния:
414 - Источник неисправности:
apigee - Код ошибки:
protocol.http.TooBigLine. - Длина запроса (байты):
7244 (> 7KB)
- Код состояния:
- Если в поле Fault Source указано значение
apigeeилиMP, в поле Fault Code — значениеprotocol.http.TooBigLine, а Request-Length превышает 7 КБ, это означает, что HTTP-запрос от клиента имеет URI запроса, превышающий допустимый лимит в Apigee .
инструмент трассировки
NGINX
Для диагностики ошибки с помощью журналов доступа NGINX:
- Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибках HTTP
414. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logГде: ORG , ENV и PORT# заменяются фактическими значениями.
- Выполните поиск, чтобы проверить наличие ошибок
414за определенный период времени (если проблема возникала ранее) или наличие запросов, которые по-прежнему завершаются с ошибкой414. Если вы обнаружите ошибки
414с кодом 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 policyОбратите внимание на длину запроса:
7244(7,244 КБ > допустимого предела).
Причина: Размер запрашиваемой полезной нагрузки превышает допустимый предел.
Диагноз
- Определите код ошибки , источник ошибки и размер запроса (Request-Length) для обнаруженной ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
- Если в поле Fault Source указано значение
apigeeилиMP, это означает, что размер запроса, отправленного клиентским приложением в Apigee, превышает допустимый предел в Apigee Edge . - Проверить, превысил ли размер строки запроса допустимый лимит в 7 КБ, можно одним из следующих способов:
Сообщение об ошибке
Для проверки используйте сообщение об ошибке:
Если у вас есть доступ к полному сообщению об ошибке, полученному от Apigee Edge, обратитесь к
faultstring).faultstringуказывает на то, что размер строки запроса превысил допустимый лимит в 7 КБ.Пример сообщения об ошибке:
"faultstring":"request line size exceeding 7,168"
Фактический запрос
Для проверки с использованием фактического запроса:
Если у вас есть доступ к фактическому запросу, отправленному клиентским приложением, выполните следующие действия:
- Проверьте размер URI, переданного в запросе.
Если вы обнаружите, что размер URI превышает допустимый лимит в Apigee Edge , то это и есть причина проблемы.
Пример запроса:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
В приведенном выше случае значение параметра запроса
qparamпревышает 7 КБ, то есть содержит более 7 000 символов ASCII.Если вы используете другой клиент, вы можете просмотреть журналы клиента и попытаться определить размер строки запроса, отправляемой в Apigee Edge.
Журналы обработчика сообщений
Для проверки с использованием журналов обработчика сообщений:
Если вы используете частное облако, то можете использовать журналы обработчика сообщений, чтобы проверить, превысил ли размер строки запроса допустимый лимит в Apigee Edge .
Проверьте журналы обработчика сообщений:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Выполните поиск, чтобы проверить наличие ошибок
414за определенный период времени (если проблема возникала в прошлом) или наличие запросов, которые по-прежнему завершаются с ошибкой414Вы можете использовать следующие поисковые запросы.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- В файле
system.logвы найдете строки, похожие на следующие:2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
Текстовое
message = request line size exceeding 7,168в приведенном выше сообщении об ошибке указывает на то, что размер URI запроса превышает 7 КБ. Поэтому Apigee Edge генерирует исключениеcom.apigee.errors.http.user.RequestURITooLongи возвращает код состояния414с кодом ошибкиprotocol.http.TooBiglineклиентским приложениям.
Разрешение
Фиксированный размер
Вариант №1 [Рекомендуется]: Исправлена ошибка, из-за которой клиентское приложение не отправляло запросы с размером URI, превышающим допустимый лимит.
- Проанализируйте причину, по которой конкретный клиент отправляет запрос с размером URI, превышающим допустимый лимит, определенный в разделе «Лимиты» .
Если это нежелательно, измените клиентское приложение таким образом, чтобы оно отправляло запросы с URI размером меньше допустимого предела.
В приведенном выше примере проблему можно решить, передав длинный параметр запроса в составе тела/полезной нагрузки запроса, а не в составе URL-адреса запроса, как показано ниже:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- Если это необходимо и вы хотите отправить URI в количестве, превышающем допустимый лимит, перейдите к следующим параметрам.
CwC
Вариант №2: Используйте свойство CwC для увеличения лимита строк запроса.
Apigee предоставляет свойство CwC , позволяющее увеличить лимит размера строки запроса. Подробнее см. раздел «Установка лимита строки запроса в обработчике сообщений».
Пределы
Apigee ожидает, что клиентское приложение и серверная часть не будут отправлять строки запроса/ответа, размер которых превышает допустимый лимит, указанный в разделе « Ограничения строк запроса/ответа» в документации Apigee Edge Limits .
- Если вы используете публичное облако , то максимальный предел размера строки запроса и ответа указан в разделе «Ограничения Apigee Edge» для размера строки запроса/ответа .
- Если вы используете частное облако, то, возможно, изменили максимальное значение по умолчанию для размера строки запроса и строки ответа (хотя это и не рекомендуется). Вы можете определить максимальное значение размера строки запроса, следуя инструкциям в разделе «Как проверить текущее ограничение» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство HTTPRequest.line.limit было обновлено новым значением в обработчиках сообщений.
- На машине обработчика сообщений найдите свойство
HTTPRequest.line.limitв каталоге/opt/apigee/edge-message-processor/confи проверьте, какое значение установлено, как показано ниже:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- Пример результата выполнения приведенной выше команды выглядит следующим образом:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
В приведенном выше примере обратите внимание, что свойство
HTTPRequest.line.limitвhttp.propertiesустановлено со значением7k.Это означает, что ограничение на размер строки запроса, настроенное в Apigee для частного облака, составляет 7 КБ.
Если вам по-прежнему нужна помощь службы поддержки Apigee, перейдите по ссылке «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию.
Соберите следующую диагностическую информацию, а затем свяжитесь со службой поддержки Apigee Edge :
Если вы являетесь пользователем публичного облака , предоставьте следующую информацию:
- Название организации
- Название среды
- Имя API-прокси
- Полная команда
curl, использованная для воспроизведения ошибки414 - Файл трассировки для запросов API
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, полученное для неудачных запросов.
- Название организации
- Название среды
- Пакет API-прокси
- Файл трассировки для неудачных запросов API
- Полная команда
curl, использованная для воспроизведения ошибки414 Журналы доступа 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