Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Symptom
Клиентское приложение получает код статуса HTTP 414 Request-URI Too Long с кодом ошибки protocol.http.TooBigLine в качестве ответа на вызовы API.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
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-запрос состоит из трех частей:
- Request-Line
- ( Набор HTTP-заголовков)
- [ Body ]
Строка запроса состоит из трех частей, как показано ниже.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Когда клиентское приложение отправляет HTTP-запрос на сервер, первая строка, которая передается на сервер, содержит строку запроса, описанную выше. Затем следуют заголовки и тело/полезная нагрузка запроса.
На приведенном ниже скриншоте показан типичный запрос curl, часть Request (вместе с Request-Line) и часть Response.
Как определить размер строки запроса
- В рассмотренном выше примере строка start (первая строка) в запросе, также называемая 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. | Пользователи общедоступного и частного облака Edge |
Распространенные этапы диагностики
Чтобы диагностировать эту ошибку, используйте один из следующих инструментов или методов:
Мониторинг API
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в интерфейс Apigee Edge как пользователь с подходящей ролью.
Перейдите к организации, в которой хотите изучить проблему.
- Перейдите на страницу Анализ > Мониторинг API > Исследование.
- Выберите период времени, в течение которого вы наблюдали ошибки.
- Постройте график Код ошибки по оси Y и Время по оси X.
- Выберите ячейку с кодом ошибки
protocol.http.TooBigLineи кодом статуса414, как показано ниже.( посмотреть изображение в полном размере)
Информация о коде ошибки
protocol.http.TooBiglineбудет показана, как на изображении ниже.( посмотреть изображение в полном размере)
Нажмите Посмотреть журналы и разверните строку с неудачным запросом:
( посмотреть изображение в полном размере)
В окне Журналы обратите внимание на следующие сведения:
- Код статуса:
414. - Источник ошибки:
apigee - Код ошибки:
protocol.http.TooBigLine. - Длина запроса(в байтах):
7244 (> 7KB)
- Код статуса:
- Если в поле Источник ошибки указано значение
apigeeилиMP, в поле Код ошибки – значениеprotocol.http.TooBigLine, а в поле Длина запроса – значение больше 7 КБ, это означает, что URI запроса HTTP-запроса от клиента превышает допустимый лимит в 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(7244 КБ превышает допустимое значение).
Причина: размер полезной нагрузки запроса превышает допустимый лимит.
диагностика;
- Определите код ошибки, источник ошибки и размер длины запроса для ошибки, обнаруженной с помощью мониторинга 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 КБ, то есть содержит более 7000 символов ASCII.Если вы используете другой клиент, просмотрите его журналы и попробуйте определить размер строки запроса, отправляемой в Apigee Edge.
Журналы процессора сообщений
Чтобы проверить данные с помощью журналов Message Processor, выполните следующие действия:
Если вы используете частное облако, то можете использовать журналы Message Processor, чтобы проверить, превышает ли размер строки запроса допустимый лимит в 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, которое позволяет увеличить лимит размера строки запроса. Подробнее о том, как задать ограничение на строку запроса в Message Processor…
Ограничения
Apigee ожидает, что клиентское приложение и сервер не будут отправлять строки запроса/ответа, размер которых превышает допустимый лимит, указанный в разделе Лимит на строку запроса/ответа статьи Лимиты Apigee Edge.
- Если вы используете общедоступное облако, максимальный размер строки запроса и ответа соответствует значению, указанному в разделе Размер строки запроса/ответа статьи Ограничения Apigee Edge.
- Если вы используете частное облако , то могли изменить максимальный размер строки запроса и ответа (хотя это не рекомендуется). Чтобы узнать максимальный размер строки запроса, следуйте инструкциям в разделе Как проверить текущий лимит.
Как проверить текущий лимит?
В этом разделе рассказывается, как проверить, что в процессорах сообщений для ресурса HTTPRequest.line.limit задано новое значение.
- На компьютере Message Processor найдите свойство
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задано значение7kвhttp.properties.Это означает, что в Apigee для Private Cloud задано ограничение на размер строки запроса в 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# заменяются фактическими значениями.
- Системные журналы Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log