Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
Клиентское приложение получает в ответ на вызовы API HTTP-приложения с кодом состояния 502 Bad Gateway и кодом ошибки protocol.http.Response405WithoutAllowHeader .
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 502 Bad Gateway
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}Возможные причины
Эта ошибка возникает, если серверная часть отвечает кодом состояния 405 Method Not Allowed без заголовка Allow .
В соответствии со спецификацией RFC 7231, раздел 6.5.5: 405 Method Not Allowed , ожидается, что исходный сервер ДОЛЖЕН сгенерировать и отправить поле заголовка Allow в ответе 405 , содержащее список поддерживаемых в настоящее время методов целевого ресурса. В противном случае Apigee отвечает кодом 502 Bad Gateway и кодом ошибки protocol.http.Response405WithoutAllowHeader .
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
|---|---|---|
| Ответ 405 без заголовка Allow от бэкэнд-сервера. | Сервер, обрабатывающий API-запрос, отвечает кодом состояния 405 без заголовка Allow . | Пользователи публичных и частных облачных сервисов на периферии сети |
Общие этапы диагностики
Для диагностики этой ошибки воспользуйтесь одним из следующих инструментов/методов:
Мониторинг API
Для диагностики ошибки с помощью мониторинга API:
- Войдите в пользовательский интерфейс Edge под учетной записью пользователя с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите расследовать проблему.

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

- В окне «Журналы» обратите внимание на следующие сведения:
- Код состояния:
502 - Источник неисправности:
target - Код ошибки:
protocol.http.Response405WithoutAllowHeader.
- Код состояния:
- Если источником ошибки является
target, а код ошибки равенprotocol.http.Response405WithoutAllowHeader, это означает, что серверная часть ответила кодом состояния405 Method Not Allowedбез заголовкаAllow.
инструмент трассировки
Для диагностики ошибки с помощью инструмента трассировки:
- Включите сеанс трассировки и либо
- Дождитесь появления ошибки
502 Bad Gateway, или - Если вы можете воспроизвести проблему, выполните вызов API для воспроизведения ошибки -
502 Bad Gateway
- Дождитесь появления ошибки
Убедитесь, что параметр «Показывать все FlowInfos» включен:

- Выберите один из запросов, завершившихся неудачей, и изучите трассировку.
- Проследите за различными этапами трассировки и определите место возникновения сбоя.
Как правило, ошибка возникает после этапа отправки запроса на целевой сервер , как показано ниже:

Обратите внимание на значение ошибки, полученное из трассировки.
Приведенный выше пример трассировки показывает ошибку «
Received 405 Response without Allow Header. Поскольку ошибка возникает в Apigee после отправки запроса на бэкэнд-сервер, это указывает на то, что бэкэнд-сервер отправил код состояния405без заголовкаAllow.- Перейдите к этапу AX (Analytics Data Recorded) в трассировке и щелкните по нему.
В панели «Подробности этапа» прокрутите вниз до раздела «Заголовки ошибок/ответов» и определите значения X-Apigee-fault-code и X-Apigee-fault-source, как показано ниже:

- Вы увидите значения X-Apigee-fault-code и X-Apigee-fault-source как
protocol.http.Response405WithoutAllowHeaderиtargetсоответственно, что указывает на то, что эта ошибка вызвана тем, что бэкэнд отправил код состояния ответа405без заголовкаAllow.Заголовки ответа Ценить X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
Для диагностики ошибки с помощью журналов доступа NGINX:
- Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибках HTTP
502. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Где: ORG , ORG и PORT# заменяются фактическими значениями.
- Выполните поиск, чтобы проверить наличие ошибок
502с кодом ошибкиprotocol.http.Response405WithoutAllowHeaderза определенный период времени (если проблема возникала ранее) или если какие-либо запросы по-прежнему завершаются с ошибкой502. Если вы обнаружите ошибки
502с кодом X-Apigee-fault-code, соответствующим значениюprotocol.http.Response405WithoutAllowHeader, определите значение X-Apigee-fault-source.Пример ошибки 502 из журнала доступа NGINX:

Приведенная выше запись из журнала доступа NGINX содержит следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответа Ценить X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Причина: ответ 405 без заголовка Allow от бэкэнд-сервера.
Диагноз
- Определите код ошибки и источник ошибки
502 Bad Gatewayиспользуя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» . - Если код ошибки равен
protocol.http.Response405WithoutAllowHeader, а в поле "Источник ошибки" указано значениеtarget, это означает, что серверная часть ответила кодом состояния405без заголовкаAllow. Следовательно, Apigee возвращает код ошибки502 Bad Gatewayс кодом ошибкиprotocol.http.Response405WithoutAllowHeader.
Разрешение
Для решения проблемы воспользуйтесь одним из следующих способов:
бэкенд-сервер
Вариант №1: Настройте серверную часть так, чтобы она отправляла код состояния 405 с заголовком Allow:
Убедитесь, что серверная часть всегда соответствует спецификации RFC 7231, раздел 6.5.5: 405 Method Not Allowed , и отправляет сообщение с кодом состояния
405, включив список разрешенных методов в заголовокAllowкак показано ниже:Allow: HTTP_METHODS
- Например, если ваш бэкэнд-сервер разрешает методы
GET,POSTиHEAD, то вам необходимо убедиться, что заголовокAllowсодержит их следующим образом:Allow: GET, POST, HEAD
Обработка ошибок
Вариант №2: Используйте обработку ошибок для отправки кода состояния 405 с заголовком Allow из вашего API-прокси:
Если серверная часть возвращает код состояния 405 без заголовка Allow , вы можете использовать обработку ошибок, чтобы отправить ответ с кодом состояния 405 и заголовком Allow от вашего API-прокси следующим образом:
Создайте политику, например, политику AssignMessage или политику RaiseFault , и установите код состояния
405с заголовкомAllowи пользовательским сообщением.Пример политики AssignMessage для отправки ошибки 405 с заголовком Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Создайте
FaultRuleвTargetEndpoint, которое будет вызывать политику при получении ошибки502с кодом ошибкиprotocol.http.Response405WithoutAllowHeader.Пример конфигурации TargetEnpoint, демонстрирующий правило обработки ошибок (FaultRule):
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Сохраните эти изменения в новой версии вашего API-прокси и разверните эту версию.
- Выполните вызовы API и убедитесь, что получаете код состояния
405с заголовкомAllow.
Настройка свойства
Вариант №3: Настройте свойство в обработчике сообщений, чтобы предотвратить возврат ошибки 502 со стороны Apigee Edge.
- Если вы используете частное облако , вы можете изменить свойство
HTTP.ignore.allow_header.for.405наtrue, чтобы предотвратить выдачу ошибки502сервером Apigee Edge, даже если серверная часть отвечает кодом состояния405без заголовкаAllow, используя руководство: Настройка игнорирования заголовка allow для 405 в обработчиках сообщений . - Если вы используете публичное облако, пожалуйста, обратитесь в службу поддержки Apigee Edge.
Спецификация
Apigee ожидает от бэкэнд-сервера ответ 405 Method Not Allowed а также заголовок Allow в соответствии со следующими спецификациями:
| Спецификация | |
|---|---|
| RFC 7231, раздел 6.5.5: 405 Метод не разрешен | |
| RFC 7231, раздел 7.4.1: Разрешить |
Важные моменты, на которые следует обратить внимание.
Рекомендуемое решение — настроить серверную часть таким образом, чтобы она отправляла код состояния 405 с заголовком Allow и соответствовала спецификации RFC 7231, раздел 6.5.5: 405 Method Not Allowed .
Если вам по-прежнему нужна помощь службы поддержки Apigee, перейдите по ссылке «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию.
Если проблема сохраняется даже после выполнения вышеуказанных инструкций, соберите следующую диагностическую информацию, а затем обратитесь в службу поддержки Apigee Edge .
Если вы являетесь пользователем публичного облака , предоставьте следующую информацию:
- Название организации
- Название среды
- Имя API-прокси
- Полная команда
curl, использованная для воспроизведения ошибки502 Bad Gatewayс кодом ошибкиprotocol.http.Response405WithoutAllowHeader - Файл трассировки для запросов API
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, полученное для неудачных запросов.
- Название среды
- пакет API-прокси
- Файл трассировки для запросов API
Журналы доступа NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Где: ORG , ORG и PORT# заменяются фактическими значениями.
- Системные журналы обработчика сообщений
/opt/apigee/var/log/edge-message-processor/logs/system.log