414 Request-URI слишком длинный — TooBigLine

Вы просматриваете документацию 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-запрос состоит из трех частей:

  1. Строка запроса
  2. (Набор HTTP-заголовков)
  3. [ Тело ]

Строка запроса состоит из трех частей, как показано ниже.

Request-Line = <Method> <Request-URI> <HTTP-Version>

Когда клиентское приложение отправляет HTTP-запрос на сервер, первая строка, идущая на сервер, содержит строку запроса, описанную выше. За этим следуют заголовки и тело запроса/полезная нагрузка.

На следующем снимке экрана показан типичный запрос curl , часть запроса (вместе со строкой запроса) и часть ответа .

Понимание размера строки запроса

  1. В примере, рассмотренном выше, начальная строка (первая строка) запроса, также называемая Request-Line , выглядит следующим образом:
    GET /test/ HTTP/1.1

    Размер строки запроса составляет ~19 bytes поскольку она содержит 19 ASCII characters . Поскольку это находится в пределах допустимого предела в Apigee Edge , запрос обрабатывается без ошибок и вы получаете успешный ответ.

  2. Аналогично, если вы посмотрите на faultstring в сообщении об ошибке , показанном выше, она содержит "request line size exceeding 7,168" . Это указывает на то, что длина строки запроса в HTTP-запросе, сделанном клиентом, превысила 7168 байт.

Вот возможные причины этой ошибки:

Причина Описание Инструкции по устранению неполадок применимы для
Размер полезных данных запроса превышает допустимый предел Размер Request-URI, отправленного клиентским приложением как часть HTTP-запроса к Apigee Edge, превышает допустимый предел в Apigee Edge . Пользователи Edge Public и Private Cloud

Общие этапы диагностики

Для диагностики этой ошибки используйте один из следующих инструментов/методов:

API-мониторинг

Чтобы диагностировать ошибку с помощью мониторинга API:

  1. Войдите в пользовательский интерфейс Apigee Edge как пользователь с соответствующей ролью .
  2. Переключитесь на организацию, в которой вы хотите разобраться в проблеме.

  3. Перейдите на страницу Анализ > Мониторинг API > Расследование .
  4. Выберите конкретный период времени, в течение которого вы наблюдали ошибки.
  5. Постройте график зависимости кода неисправности от времени .
  6. Выберите ячейку с кодом неисправности protocol.http.TooBigLine и кодом состояния 414 , как показано ниже:

    ( просмотреть увеличенное изображение )

  7. Вы увидите информацию о коде неисправности protocol.http.TooBigline , как показано ниже:

    ( просмотреть увеличенное изображение )

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

    ( просмотреть увеличенное изображение )

  9. В окне «Журналы» обратите внимание на следующие детали:

    • Код состояния: 414
    • Источник неисправности: apigee
    • Код ошибки: protocol.http.TooBigLine .
    • Длина запроса (байты): 7244 (> 7KB)
  10. Если источник сбоя имеет значение apigee или MP , код сбоя имеет значение protocol.http.TooBigLine и длина запроса превышает 7 КБ, то это указывает на то, что HTTP-запрос от клиента имеет URI запроса, превышающий допустимый предел. в Апигее .

Инструмент трассировки

НГИНКС

Чтобы диагностировать ошибку с помощью журналов доступа NGINX:

  1. Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа NGINX для определения ключевой информации об ошибках HTTP 414 .
  2. Проверьте журналы доступа NGINX:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

    Где: ORG , ENV и PORT# заменяются фактическими значениями.

  3. Выполните поиск, чтобы узнать, возникли ли какие-либо ошибки 414 в течение определенного периода времени (если проблема возникла в прошлом) или есть ли какие-либо запросы, которые по-прежнему не выполняются с 414 .
  4. Если вы обнаружите какие-либо ошибки 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 КБ > разрешенный предел).

Причина: размер полезных данных запроса превышает допустимый предел.

Диагностика

  1. Определите код ошибки , источник ошибки и размер запроса для наблюдаемой ошибки с помощью мониторинга API, инструмента трассировки или журналов доступа NGINX, как описано в разделе «Общие шаги диагностики» .
  2. Если Fault Source имеет значение apigee или MP , это указывает на то, что размер запроса, отправляемого клиентским приложением в Apigee, превышает допустимый предел в Apigee Edge .
  3. Вы можете проверить, что размер строки запроса превысил разрешенный предел в 7 КБ, используя один из следующих методов:

    Сообщение об ошибке

    Чтобы подтвердить использование сообщения об ошибке:

    Если у вас есть доступ к полному сообщению об ошибке, полученному от Apigee Edge, обратитесь к faultstring . faultstring указывает, что размер строки запроса превысил допустимый предел в 7 КБ.

    Пример сообщения об ошибке:

    "faultstring":"request line size exceeding 7,168"

    Фактический запрос

    Чтобы подтвердить использование фактического запроса:

    Если у вас есть доступ к фактическому запросу, сделанному клиентским приложением, выполните следующие действия:

    1. Проверьте размер URI, переданного в запросе.
    2. Если вы обнаружите, что размер URI превышает допустимый предел в Apigee Edge , то это и есть причина проблемы.

      Пример запроса:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      В приведенном выше случае значение параметра запроса qparam превышает 7 КБ, то есть содержит более 7 КБ символов ASCII.

      Если вы используете какой-либо другой клиент, вы можете просмотреть журналы клиента и попытаться узнать размер строки запроса, отправляемой в Apigee Edge.

    Журналы процессора сообщений

    Для проверки с использованием журналов процессора сообщений:

    Если вы являетесь пользователем частного облака, вы можете использовать журналы процессора сообщений, чтобы проверить, превысил ли размер строки запроса разрешенный предел в Apigee Edge .

    1. Проверьте журналы процессора сообщений:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Выполните поиск, чтобы узнать, возникли ли какие-либо ошибки 414 в течение определенного периода времени (если проблема возникла в прошлом) или есть ли какие-либо запросы, которые по-прежнему не выполняются с 414 . Вы можете использовать следующие строки поиска.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Вы найдете строки из 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, размер которого превышает допустимый предел.

  1. Проанализируйте причину, по которой конкретный клиент отправляет размер URI запроса, превышающий допустимый предел, определенный в Limits .
  2. Если это нежелательно, измените клиентское приложение так, чтобы оно отправляло запрос URI размером меньше допустимого предела.

    В примере, рассмотренном выше, вы можете решить проблему, передав длинный параметр запроса как часть тела/полезной нагрузки запроса, а не как часть URL-адреса запроса, как показано ниже:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Если это желательно и вы хотите отправить URI, превышающий разрешенный лимит, перейдите к следующим параметрам.

КвК

Вариант № 2. Используйте свойство CwC, чтобы увеличить лимит строки запроса.

Apigee предоставляет свойство CwC , которое позволяет увеличить предел размера строки запроса. Подробности см. в разделе «Установка ограничения строки запроса в процессоре сообщений».

Пределы

Apigee ожидает, что клиентское приложение и внутренний сервер не будут отправлять строки запроса/ответа, размеры которых превышают допустимый предел, как описано в разделе «Ограничение строки запроса/ответа» в Apigee Edge Limits .

  1. Если вы являетесь пользователем общедоступного облака , то максимальный предел размера строки запроса и ответа соответствует размеру строки запроса/ответа, указанному в Apigee Edge Limits .
  2. Если вы являетесь пользователем частного облака, возможно, вы изменили максимальный предел по умолчанию для размера строки запроса и ответа (хотя это не рекомендуется). Вы можете определить максимальный размер строки запроса, следуя инструкциям в разделе «Как проверить текущий предел» .

Как проверить текущий лимит?

В этом разделе объясняется, как проверить, что свойство HTTPRequest.line.limit было обновлено новым значением в процессорах сообщений.

  1. На компьютере с процессором сообщений найдите свойство HTTPRequest.line.limit в каталоге /opt/apigee/edge-message-processor/conf и проверьте, какое значение было установлено, как показано ниже:
    grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. Пример результата выполнения приведенной выше команды выглядит следующим образом:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
  3. Обратите внимание, что в приведенном выше примере для свойства 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