Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния 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-запрос состоит из трех частей:
- Строка запроса
- (Набор HTTP-заголовков)
- [ Тело ]
Строка запроса состоит из трех частей, как показано ниже.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Когда клиентское приложение отправляет HTTP-запрос на сервер, первая строка, идущая на сервер, содержит строку запроса, описанную выше. За этим следуют заголовки и тело запроса/полезная нагрузка.
На следующем снимке экрана показан типичный запрос 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 . | Пользователи Edge Public и Private Cloud |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
API-мониторинг
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge как пользователь с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите разобраться в проблеме.
- Перейдите на страницу Анализ > Мониторинг API > Расследование .
- Выберите конкретный период времени, в течение которого вы наблюдали ошибки.
- Постройте график зависимости кода неисправности от времени .
- Выберите ячейку с кодом неисправности
protocol.http.TooBigLine
и кодом состояния414
, как показано ниже: Вы увидите информацию о коде неисправности
protocol.http.TooBigline
, как показано ниже:Нажмите «Просмотреть журналы» и разверните строку с невыполненным запросом:
В окне «Журналы» обратите внимание на следующие детали:
- Код состояния:
414
- Источник неисправности:
apigee
- Код ошибки:
protocol.http.TooBigLine
. - Длина запроса (байты):
7244 (> 7KB)
- Код состояния:
- Если источник сбоя имеет значение
apigee
илиMP
, код сбоя имеет значениеprotocol.http.TooBigLine
и длина запроса превышает 7 КБ, то это указывает на то, что HTTP-запрос от клиента имеет URI запроса, превышающий допустимый предел. в Апигее .
Инструмент трассировки
НГИНКС
Чтобы диагностировать ошибку с помощью журналов доступа 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-код неисправности protocol.http.TooBigLine
X-Apigee-источник-ошибки policy
Обратите внимание на длину запроса:
7244
(7,244 КБ > разрешенный предел).
Причина: размер полезных данных запроса превышает допустимый предел.
Диагностика
- Определите код ошибки , источник ошибки и размер запроса для наблюдаемой ошибки с помощью мониторинга 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 КБ символов 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
http.TooBigline клиентским приложениям.
Разрешение
Исправить размер
Вариант № 1 [рекомендуется]: исправить клиентское приложение, чтобы оно не отправляло запрос URI, размер которого превышает допустимый предел.
- Проанализируйте причину, по которой конкретный клиент отправляет размер URI запроса, превышающий допустимый предел, определенный в Limits .
Если это нежелательно, измените клиентское приложение так, чтобы оно отправляло запрос URI размером меньше допустимого предела.
В примере, рассмотренном выше, вы можете решить проблему, передав длинный параметр запроса как часть тела/полезной нагрузки запроса, а не как часть URL-адреса запроса, как показано ниже:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- Если это желательно и вы хотите отправить URI, превышающий разрешенный лимит, перейдите к следующим параметрам.
КвК
Вариант № 2. Используйте свойство CwC, чтобы увеличить лимит строки запроса.
Apigee предоставляет свойство CwC , которое позволяет увеличить предел размера строки запроса. Подробности см. в разделе «Установка ограничения строки запроса в процессоре сообщений».
Пределы
Apigee ожидает, что клиентское приложение и внутренний сервер не будут отправлять строки запроса/ответа, размеры которых превышают допустимый предел, как описано в разделе «Ограничение строки запроса/ответа» в Apigee Edge Limits .
- Если вы являетесь пользователем общедоступного облака , то максимальный предел размера строки запроса и ответа соответствует размеру строки запроса/ответа, указанному в Apigee Edge Limits .
- Если вы являетесь пользователем частного облака, возможно, вы изменили максимальный предел по умолчанию для размера строки запроса и ответа (хотя это не рекомендуется). Вы можете определить максимальный размер строки запроса, следуя инструкциям в разделе «Как проверить текущий предел» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство 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
установлено значение7k
вhttp.properties
.Это указывает на то, что ограничение размера строки запроса, настроенное в Apigee для частного облака, составляет 7 КБ.
Если вам по-прежнему нужна помощь со стороны службы поддержки Apigee, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию
Соберите следующую диагностическую информацию, а затем обратитесь в службу поддержки Apigee Edge :
Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя 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