Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния HTTP 502 Bad Gateway с кодом ошибки protocol.http.Response405WithoutAllowHeader в качестве ответа на вызовы API.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
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 . | Пользователи Edge Public и Private Cloud |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
API-мониторинг
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в пользовательский интерфейс Edge как пользователь с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите разобраться в проблеме.

- Перейдите на страницу Анализ > Мониторинг API > Расследование .
- Выберите конкретный период времени, в течение которого вы наблюдали ошибки.
Постройте график зависимости кода неисправности от времени .
Выберите ячейку с кодом ошибки
protocol.http.Response405WithoutAllowHeader, как показано ниже:
Информация о коде неисправности
protocol.http.Response405WithoutAllowHeaderhttp.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 (записанные аналитические данные) в трассировке и щелкните его.
Прокрутите вниз до раздела «Заголовки ошибок/ответов» на панели «Сведения о фазе» и определите значения X-Apigee-fault-code и X-Apigee-fault-source, как показано ниже:

- Вы увидите значения X-Apigee-fault-code и X-Apigee-fault-source как
protocol.http.Response405WithoutAllowHeaderиtargetсоответственно, что указывает на то, что эта ошибка вызвана тем, что серверная часть отправила код состояния ответа405без заголовкаAllow. .Заголовки ответов Ценить X-Apigee-код неисправности protocol.http.Response405WithoutAllowHeaderX-Apigee-источник-ошибки target
НГИНКС
Чтобы диагностировать ошибку с помощью журналов доступа 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-код неисправности protocol.http.Response405WithoutAllowHeaderX-Apigee-источник-ошибки target
Причина: ответ 405 без заголовка Allow от внутреннего сервера.
Диагностика
- Определите код ошибки и источник ошибки для
502 Bad Gatewayс помощью мониторинга API, инструмента трассировки или журналов доступа NGINX, как описано в разделе «Общие шаги диагностики» . - Если код ошибки —
protocol.http.Response405WithoutAllowHeader, а источник ошибки имеет значениеtarget, это означает, что внутренний сервер ответил кодом состояния405без заголовкаAllow. Поэтому Apigee отвечает502 Bad Gatewayс кодом ошибкиprotocol.http.Response405WithoutAllowHeaderhttp.Response405WithoutAllowHeader .
Разрешение
Для решения проблемы используйте один из следующих способов:
Внутренний сервер
Вариант № 1. Исправьте внутренний сервер, чтобы он отправлял код состояния 405 с заголовком «Разрешить»:
Убедитесь, что внутренний сервер всегда соответствует спецификации RFC 7231, раздел 6.5.5: «Метод 405 не разрешен» , и отправляет код состояния
405, включая список разрешенных методов как часть заголовкаAllowРазрешить», как показано ниже:Allow: HTTP_METHODS
- Например, если ваш внутренний сервер разрешает методы
GET,POSTиHEAD, вам необходимо убедиться, что заголовокAllowсодержит их следующим образом:Allow: GET, POST, HEAD
Обработка ошибок
Вариант № 2. Используйте обработку ошибок, чтобы отправить код состояния 405 с заголовком «Разрешить» из вашего прокси-сервера 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.Response405WithoutAllowHeaderhttp.Response405WithoutAllowHeader.Пример конфигурации TargetEndpoint, показывающий 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. Настройте свойство в процессоре сообщений, чтобы Apigee Edge не возвращал ошибку 502.
- Если вы являетесь пользователем частного облака , вы можете обновить свойство
HTTP.ignore.allow_header.for.405доtrue, чтобы Apigee Edge не выдавал ошибку502, даже если внутренний сервер отвечает кодом состояния405без заголовкаAllow, используя Практическое руководство: Настройка заголовка ignoreallow для свойства 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 .
Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя 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