Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния HTTP 431 Request Header Fields Too Large с кодом ошибки protocol.http.TooBigHeaders в качестве ответа на вызовы API.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 431 Request Header Fields Too Large
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"request headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Возможные причины
Эта ошибка возникает, если общий размер всех заголовков запросов, отправленных клиентским приложением в Apigee Edge как часть HTTP-запроса, превышает допустимый предел в Apigee Edge согласно RFC 6585, раздел 5: 431 Request Header Fields Too Large .
Вот возможные причины этой ошибки:
| Причина | Описание | Инструкции по устранению неполадок применимы для |
|---|---|---|
| Размер заголовков запроса превышает допустимый предел | Общий размер всех заголовков, отправленных клиентским приложением в составе HTTP-запроса к Apigee Edge, превышает допустимый предел в Apigee Edge . | Пользователи Edge Public и Private Cloud |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
API-мониторинг
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge как пользователь с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите разобраться в проблеме.

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

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

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

В окне «Журналы» обратите внимание на следующие детали:
- Код состояния:
431 - Источник неисправности:
apigee - Код ошибки:
protocol.http.TooBigHeaders. - Длина запроса (байты):
32150 (> 25 KB)
- Код состояния:
- Если источник сбоя имеет значение
apigeeилиMP, код сбоя имеет значениеprotocol.http.TooBigHeadersи длина запроса превышает 25 КБ, то это указывает на то, что общий размер всех заголовков запросов, отправленных клиентским приложением как часть HTTP запрос превышает разрешенный лимит в Apigee .
Инструмент трассировки
НГИНКС
Чтобы диагностировать ошибку с помощью журналов доступа NGINX:
- Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа NGINX для определения ключевой информации об ошибках HTTP
431. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logГде: ORG , ENV и PORT# заменяются фактическими значениями.
- Выполните поиск, чтобы узнать, возникли ли какие-либо ошибки
431в течение определенного периода времени (если проблема возникла в прошлом) или есть ли какие-либо запросы, которые по-прежнему завершаются с ошибкой431. Если вы обнаружите какие-либо ошибки
431с кодом X-Apigee-fault-code , соответствующим значениюprotocol.http.TooBigHeaders, определите значение X-Apigee-fault-source.
Приведенный выше пример записи из журнала доступа NGINX имеет следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответов Ценить X-Apigee-код неисправности protocol.http.TooBigHeadersX-Apigee-источник-ошибки MPОбратите внимание на длину запроса:
40159(40 КБ больше, чем 25 КБ, допустимый предел для заголовков запросов в Apigee Edge).В приведенном выше примере записи журнала X-Apigee-fault-source имеет значение
apigeeилиMP, X-Apigee-fault-code имеет значениеprotocol.http.TooBigHeaders, а длина запроса равна 40 КБ, что больше, чем разрешенный лимит в Apigee — 25 КБ. Это ясно указывает на то, что общий размер всех заголовков запросов, отправленных клиентским приложением как часть HTTP-запроса, превысил разрешенный предел в 25 КБ в Apigee Edge.
Причина: размер заголовков запросов превышает допустимый предел.
Диагностика
- Определите код ошибки , источник ошибки и размер запроса для наблюдаемой ошибки с помощью журналов мониторинга API или доступа NGINX, как описано в разделе «Общие шаги диагностики» .
- Если источник сбоя имеет значение
apigeeилиMP, код сбоя имеет значениеprotocol.http.TooBigHeaders, а длина запроса превышает 25 КБ, то это указывает на то, что размер запроса, отправленного клиентским приложением в Apigee, больше, чем размер запроса. разрешенный лимит в Apigee Edge . - Вы можете проверить, что размер заголовков запроса превысил разрешенный предел в 25 КБ, используя один из следующих методов:
Сообщение об ошибке
Чтобы подтвердить использование сообщения об ошибке:
Если у вас есть доступ к полному сообщению об ошибке, полученному от Apigee Edge, обратитесь к
faultstring.faultstringуказывает, что общий размер заголовков запроса превысил допустимый предел в 25 КБ.Пример сообщения об ошибке:
"faultstring":"request headers size exceeding 25,600"
Фактический запрос
Чтобы подтвердить использование фактического запроса:
Если у вас есть доступ к фактическому запросу, сделанному клиентским приложением, выполните следующие действия:
- Проверьте размер заголовков, переданных в запросе.
Если вы обнаружите, что общий размер заголовков превышает разрешенный предел в Apigee Edge , то это и есть причина проблемы.
Пример запроса:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
В приведенном выше случае общий размер заголовков
header0,header1,header2иheader3превышает 25 КБ, то есть содержит более 25 тыс. символов ASCII (байт).Если вы используете какой-либо другой клиент, вы можете просмотреть журналы клиента и попытаться узнать размер строки запроса, отправляемой в Apigee Edge.
Журналы процессора сообщений
Для проверки с использованием журналов процессора сообщений:
Если вы являетесь пользователем частного облака, вы можете использовать журналы процессора сообщений, чтобы проверить, превысил ли размер заголовков запросов разрешенный предел в Apigee Edge .
Проверьте журналы процессора сообщений:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Выполните поиск, чтобы узнать, возникли ли какие-либо ошибки
431в течение определенного периода времени (если проблема возникла в прошлом) или есть ли какие-либо запросы, которые по-прежнему завершаются с ошибкой431. Вы можете использовать следующие строки поиска.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Вы найдете строки из
system.log, подобные следующим:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
Текстовое
message = request headers size exceeding 25,600в приведенном выше сообщении об ошибке означает, что общий размер заголовков запроса превышает 25 КБ. Таким образом, Apigee Edge генерирует исключениеcom.apigee.errors.http.user.RequestHeadersTooLargeи возвращает код состояния431с кодом ошибкиprotocol.http.TooBigHeadersклиентским приложениям.
Разрешение
Исправить размер
Вариант № 1 [рекомендуется]: исправить клиентское приложение, чтобы оно не отправляло заголовки запросов, общий размер которых превышает допустимый предел.
- Проанализируйте причину, по которой конкретный клиент отправляет заголовок запроса большого размера, из-за которого общий размер заголовка превышает допустимый предел, определенный в Limits .
Если это нежелательно, измените клиентское приложение так, чтобы оно отправляло заголовки запросов размером меньше разрешенного предела.
В примере, рассмотренном выше, вы можете решить проблему, передав параметр значений длинного заголовка как часть тела/полезной нагрузки запроса:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- Если это желательно и вы хотите отправить заголовок, превышающий разрешенный лимит, перейдите к следующему варианту.
КвК
Вариант № 2. Используйте свойство CwC, чтобы увеличить лимит строки запроса.
Apigee предоставляет свойство CwC , которое позволяет увеличить предел размера строки запроса. Подробности см. в разделе «Установка ограничения строки запроса в процессоре сообщений».
Пределы
Apigee ожидает, что клиентское приложение и внутренний сервер не будут отправлять заголовки запроса/ответа, размеры которых превышают допустимый предел, как указано в разделе «Ограничение размера заголовка запроса/ответа» в Apigee Edge Limits .
- Если вы являетесь пользователем общедоступного облака , то максимальный предел размера заголовков запросов и ответов соответствует размеру заголовка запроса/ответа, указанному в Apigee Edge Limits .
- Если вы являетесь пользователем частного облака, возможно, вы изменили максимальный предел по умолчанию для размера заголовков запросов и ответов (хотя это не рекомендуется). Вы можете определить максимальный размер заголовка запроса, следуя инструкциям в разделе «Как проверить текущий предел» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство HTTPRequest.headers.limit обновлено новым значением в процессорах сообщений.
- На компьютере с процессором сообщений найдите свойство
HTTPRequest.headers.limitв каталоге/opt/apigee/edge-message-processor/confи проверьте, какое значение было установлено, как показано ниже:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Пример результата выполнения приведенной выше команды выглядит следующим образом:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
Обратите внимание, что в приведенном выше примере вывода свойству
HTTPRequest.headers.limitприсвоено значение25kвhttp.properties.Это указывает на то, что ограничение размера заголовка запроса, настроенного в Apigee для частного облака, составляет 25 КБ.
Спецификация
Apigee Edge ожидает, что клиентское приложение не будет отправлять заголовки большого размера в составе запроса. Если запрос содержит заголовки, общий размер которых превышает указанный предел, Apigee выдает 431 Request Header Fields Too Large в соответствии со следующими спецификациями RFC:
| Спецификация |
|---|
| RFC 6585, раздел 5: 431 Поля заголовка запроса слишком велики |
Если вам по-прежнему нужна помощь со стороны службы поддержки Apigee, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию
Соберите следующую диагностическую информацию, а затем обратитесь в службу поддержки Apigee Edge :
Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя API-прокси
- Полная команда
curl, используемая для воспроизведения ошибки431 - Файл трассировки запросов API
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, наблюдаемое для неудачных запросов
- Название организации
- Имя среды
- Пакет API-прокси
- Файл трассировки неудачных запросов API
- Полная команда
curl, используемая для воспроизведения ошибки431 Журналы доступа 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