Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway z błędem
protocol.http.Response405WithoutAllowHeader jako odpowiedź na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Możesz też zobaczyć następujący komunikat o błędzie:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}Możliwe przyczyny
Ten błąd występuje, jeśli serwer backendu odpowiada ze stanem 405 Method Not Allowed
bez nagłówka Allow.
Zgodnie ze specyfikacją
RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Metoda niedozwolona), należy
MUSI wygenerować i wysłać pole nagłówka Allow w odpowiedzi 405 zawierającej
lista obecnie obsługiwanych metod zasobu docelowego. Jeśli nie, Apigee zwróci odpowiedź
502 Bad Gateway i kod błędu protocol.http.Response405WithoutAllowHeader.
| Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
|---|---|---|
| Odpowiedź 405 bez zezwalania na nagłówek z serwera backendu | Serwer backendu, który przetwarza żądanie do interfejsu API, odpowiada kodem stanu 405 bez nagłówka Allow. |
Użytkownicy chmury publicznej i prywatnej Edge |
Typowe kroki diagnostyki
Użyj jednego z tych narzędzi lub metod, aby zdiagnozować ten błąd:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się w interfejsie Edge jako użytkownik z uprawnieniami odpowiednią rolę.
Przełącz się na organizację, w której chcesz zbadać problem.
- Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
- Wybierz okres, w którym zaobserwowano błędy.
Porównaj Kod błędu z czasem.
Wybierz komórkę, która zawiera kod błędu
protocol.http.Response405WithoutAllowHeaderjak pokazano poniżej:
Informacje o kodzie błędu
protocol.http.Response405WithoutAllowHeaderjak pokazano poniżej:
Kliknij Wyświetl logi i rozwiń jedno z nieudanych żądań, aby wyświetlić więcej informacji.
- W oknie Logi zwróć uwagę na te informacje:
- Kod stanu:
502 - Źródło błędu:
target - Kod błędu:
protocol.http.Response405WithoutAllowHeader.
- Kod stanu:
- Jeśli Źródło błędu to
target, a Kod błędu –protocol.http.Response405WithoutAllowHeader, oznacza to, że backend serwer odpowiedział kodem stanu405 Method Not Allowedbez NagłówekAllow.
Narzędzie śledzenia
Aby zdiagnozować błąd za pomocą narzędzia śledzenia:
- Włącz
śledzenie sesji oraz
- Poczekaj, aż wystąpi błąd
502 Bad Gatewaylub - Jeśli możesz odtworzyć problem, wywołaj interfejs API, aby odtworzyć problem.
502 Bad Gatewaybłąd
- Poczekaj, aż wystąpi błąd
Sprawdź, czy opcja Show all FlowInfos jest włączona:
- Wybierz jedno z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
Błąd występuje zwykle w trakcie procesu po wysłaniu żądania do serwera docelowego faza, jak poniżej:
Zwróć uwagę na wartość błędu z śladu.
Powyższy przykładowy log czasu pokazuje błąd jako
Received 405 Response without Allow Header. Ponieważ Apigee zgłasza błąd po wysłaniu żądania do backendu , oznacza to, że serwer backendu wysłał kod stanu odpowiedzi405bez nagłówkaAllow.- Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
Przewiń stronę w dół do sekcji Error / Response Headers (Nagłówki błędów/odpowiedzi) na stronie Step Details (Szczegóły etapu). i określić wartości X-Apigee-fault-code i X-Apigee-fault-source, jak pokazano poniżej:
- Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source jako
protocol.http.Response405WithoutAllowHeaderitargetodpowiednio, wskazujący, że ten błąd jest spowodowany tym, że backend wysłał Kod stanu odpowiedzi405bez nagłówkaAllow.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
Aby zdiagnozować błąd przy użyciu logów dostępu NGINX:
- Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX do określenia
najważniejsze informacje o błędach HTTP
502. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Gdzie: wartości ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.
- Wyszukaj błędy (
502) z kodem błęduprotocol.http.Response405WithoutAllowHeaderw konkretnym okresie (jeśli w przeszłości) lub jeśli jakieś żądania nadal kończą się niepowodzeniem502 Jeśli znajdziesz błędy
502w X-Apigee-fault-code paskującym wartośćprotocol.http.Response405WithoutAllowHeader, a następnie wyznacz X-Apigee-fault-source..Przykładowy błąd 502 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX zawiera następujące wartości dla X-Apigee- kod błędu i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Przyczyna: odpowiedź 405 bez zezwalania na nagłówek z serwera backendu
Diagnostyka
- Określ kod błędu i źródło błędu dla
502 Bad Gatewayprzy użyciu API Monitoring, narzędzia Trace lub logów dostępu NGINX, jak wyjaśniono w Najczęstsze czynności diagnostyczne. - Jeśli kod błędu to
protocol.http.Response405WithoutAllowHeaderi Źródło błędu ma wartośćtarget, oznacza to, że serwer backendu ma odpowiedział(a) kodem stanu405bez nagłówkaAllow. Dlatego Apigee wysyła odpowiedź z kodem błędu502 Bad Gatewayprotocol.http.Response405WithoutAllowHeader
Rozdzielczość
Aby rozwiązać problem, użyj jednej z tych metod:
Serwer backendu
Opcja 1. Napraw serwer backendu, aby wysyłać kod stanu 405 z nagłówkiem Zezwalaj:
Zadbaj o to, aby serwer backendu zawsze przestrzegał specyfikacji RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Metoda niedozwolona) i wysyła ze stanem
405przez dodanie listy metod, które są dozwolone w nagłówkuAllowjak poniżej:Allow: HTTP_METHODS
- Jeśli na przykład serwer backendu zezwala na
GET,POSTiHEAD, musisz upewnić się, że nagłówekAllowzawiera w następujący sposób:Allow: GET, POST, HEAD
Obsługa awarii
Opcja 2. Użyj usługi Fault handling, aby wysłać kod stanu 405 z nagłówkiem Zezwalaj z interfejsu API. serwer proxy:
Jeśli serwer backendu zwraca kod stanu 405 bez Allow
możesz użyć obsługi błędów, aby odpowiedzieć z kodem stanu 405 i atrybutem
Nagłówek Allow z serwera proxy interfejsu API w taki sposób:
Utwórz zasadę, na przykład Zasady AssignMessage lub RaiseFault policy i ustaw kod stanu na
405z nagłówkiemAllowi niestandardowym .Przykładowa zasada AssignMessage wysyłająca kod błędu 405 z nagłówkiem 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>
Utwórz obiekt
FaultRulewTargetEndpoint, który wywołuje zasadę. po wyświetleniu błędu502z kodem błęduprotocol.http.Response405WithoutAllowHeaderPrzykładowa konfiguracja docelowego punktu końcowego z FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Zapisz te zmiany w nowej wersji serwera proxy interfejsu API i wdróż tę wersję.
- Wywołuj interfejs API i sprawdź, czy otrzymujesz kod stanu
405za pomocąAllow.
Skonfiguruj usługę
Opcja 3. Skonfiguruj właściwość w procesorze wiadomości, aby uniemożliwić Apigee Edge zwracanie błędu 502
- Jeśli jesteś użytkownikiem Private Cloud, możesz zaktualizować usługę
Od
HTTP.ignore.allow_header.for.405dotrue, aby uniemożliwić Apigee Edge powoduje zgłaszanie błędu502, nawet jeśli serwer backendu odpowiada405kodu stanu bez nagłówkaAllow. , Konfiguruję nagłówek ignorowania zezwalania dla właściwości 405 w systemach przetwarzania wiadomości. - Jeśli korzystasz z usługi Public Cloud , skontaktuj się z zespołem pomocy Apigee Edge
Specyfikacja
Apigee oczekuje odpowiedzi 405 Method Not Allowed od serwera backendu
z nagłówkiem Allow, zgodnie z tymi specyfikacjami:
| Specyfikacja | |
|---|---|
| RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Niedozwolona metoda) | |
| RFC 7231, sekcja 7.4.1: Zezwalaj |
Najważniejsze kwestie
Zalecanym rozwiązaniem jest naprawienie błędu serwera backendu, aby wysyłał kod stanu 405
z nagłówkiem Allow i zgodne ze specyfikacją
RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Niedozwolona metoda).
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, wejdź na Musi zbierać informacje diagnostyczne.
Musi zbierać informacje diagnostyczne
Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zwróć uwagę na informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge.
Jeśli jesteś użytkownikiem Public Cloud, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa serwera proxy interfejsu API
- Wykonaj polecenie
curlużyte do odtworzenia502 Bad Gatewayz użyciem kod błęduprotocol.http.Response405WithoutAllowHeader - Plik śledzenia żądań do interfejsu API
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Pełny komunikat o błędzie zaobserwowany dla nieudanych żądań
- Nazwa środowiska
- Pakiet serwerów proxy interfejsu API
- Plik śledzenia żądań do interfejsu API
Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Gdzie: wartości ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.
- Logi systemowe procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log