Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway z kodem błędu protocol.http.Response405WithoutAllowHeader w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Może też pojawić się ten 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 kodem stanu 405 Method Not Allowed bez nagłówka Allow.
Zgodnie ze specyfikacją
RFC 7231, sekcja 6.5.5: 405 Method Not Allowed, oczekuje się, że serwer pierwotny
MUSI wygenerować i wysłać pole nagłówka Allow w odpowiedzi 405 zawierającej
listę obecnie obsługiwanych metod zasobu docelowego. W przeciwnym razie Apigee odpowiada kodem
502 Bad Gateway i kodem błędu protocol.http.Response405WithoutAllowHeader.
| Przyczyna | Opis | Instrukcje rozwiązywania problemów, których dotyczy |
|---|---|---|
| Odpowiedź 405 bez nagłówka Allow 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 czynności diagnostyczne
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub technik:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się w interfejsie Edge jako użytkownik z odpowiednią rolą.
Przejdź do organizacji, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
Wykreśl Kod błędu względem Czasu.
Wybierz komórkę z kodem błędu
protocol.http.Response405WithoutAllowHeaderjak pokazano poniżej:
Informacje o kodzie błędu
protocol.http.Response405WithoutAllowHeadersą wyświetlane jak poniżej:
Kliknij Wyświetl logi i rozwiń jedno z nieudanych żądań, aby wyświetlić więcej informacji.
- W oknie Logi zanotuj 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 toprotocol.http.Response405WithoutAllowHeader, oznacza to, że serwer backendu odpowiedział kodem stanu405 Method Not Allowedbez nagłówkaAllow.
Narzędzie Trace
Aby zdiagnozować błąd za pomocą narzędzia Trace:
- Włącz sesję śledzenia
i:
- poczekaj na wystąpienie błędu
502 Bad Gatewaylub - jeśli możesz odtworzyć problem, wywołaj interfejs API, aby go odtworzyć –
502 Bad Gatewaybłąd
- poczekaj na wystąpienie błędu
Sprawdź, czy jest włączona opcja Pokaż wszystkie informacje o przepływach:
- Wybierz jedno z nieudanych żądań i sprawdź ślad.
- Przejdź przez różne etapy śledzenia i znajdź miejsce, w którym wystąpił błąd.
Błąd zwykle występuje w przepływie po etapie Żądanie wysłane do serwera docelowego , jak pokazano poniżej:
Zanotuj wartość błędu ze śladu.
Powyższy przykładowy ślad pokazuje błąd
Received 405 Response without Allow Header. Ponieważ błąd jest zgłaszany przez Apigee po wysłaniu żądania do serwera backendu oznacza to, że serwer backendu wysłał kod stanu odpowiedzi405bez nagłówkaAllow.- W śladzie otwórz etap AX (Zapisane dane Analytics) i kliknij go.
W panelu Szczegóły etapu przewiń w dół do sekcji Błędy / Nagłówki odpowiedzi i określ 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 odpowiednio jako
protocol.http.Response405WithoutAllowHeaderitarget, co oznacza, ż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 za pomocą logów dostępu NGINX:
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz użyć logów dostępu NGINX, aby określić
kluczowe informacje o błędach HTTP
502. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Gdzie: ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) nie ma błędów
502z kodem błęduprotocol.http.Response405WithoutAllowHeaderlub czy nadal występują błędy502. Jeśli znajdziesz błędy
502z X-Apigee-fault-code pasującym do wartościprotocol.http.Response405WithoutAllowHeader, określ wartość X-Apigee-fault-source.Przykładowy błąd 502 z logu dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma te wartości X-Apigee- fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Przyczyna: odpowiedź 405 bez nagłówka Allow z serwera backendu
Diagnostyka
- Określ Kod błędu i Źródło błędu dla
502 Bad Gatewayza pomocą monitorowania interfejsów API, narzędzia Trace lub logów dostępu NGINX, jak opisano w Typowe czynności diagnostyczne. - Jeśli Kod błędu to
protocol.http.Response405WithoutAllowHeader, a Źródło błędu ma wartośćtarget, oznacza to, że serwer backendu odpowiedział kodem stanu405bez nagłówkaAllow. Dlatego Apigee odpowiada kodem502 Bad Gatewayz kodem błęduprotocol.http.Response405WithoutAllowHeader.
Rozdzielczość
Aby rozwiązać ten problem, użyj jednej z tych metod:
Serwer backendu
Opcja 1. Popraw serwer backendu, aby wysyłał kod stanu 405 z nagłówkiem Allow:
Upewnij się, że serwer backendu zawsze przestrzega specyfikacji RFC 7231, sekcja 6.5.5: 405 Method Not Allowed i wysyła kod stanu
405, dołączając listę dozwolonych metod w nagłówkuAllow, jak pokazano poniżej:Allow: HTTP_METHODS
- Jeśli np. serwer backendu zezwala na metody
GET,POSTiHEAD, musisz się upewnić, że nagłówekAllowzawiera je w ten sposób:Allow: GET, POST, HEAD
Obsługa błędów
Opcja 2. Użyj obsługi błędów, aby wysłać kod stanu 405 z nagłówkiem Allow z proxy interfejsu API:
Jeśli serwer backendu zwraca kod stanu 405 bez nagłówka Allow
, możesz użyć obsługi błędów, aby odpowiedzieć kodem stanu 405 i nagłówkiem
Allow z proxy interfejsu API w ten sposób:
Utwórz zasadę, np. AssignMessage lub RaiseFault i ustaw kod stanu na
405z nagłówkiemAllowi niestandardowym komunikatem.Przykładowa zasada AssignMessage do wysyłania kodu 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
FaultRulewTargetEndpoint, który wywołuje zasadę po otrzymaniu błędu502z kodem błęduprotocol.http.Response405WithoutAllowHeader.Przykładowa konfiguracja TargetEndpoint pokazująca 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 proxy interfejsu API i wdróż tę wersję.
- Wywołaj interfejs API i sprawdź, czy otrzymujesz kod stanu
405z nagłówkiemAllow.
Konfigurowanie usługi
Opcja 3. Skonfiguruj właściwość w procesorze komunikatów, aby uniemożliwić Apigee Edge zwracanie błędu 502
- Jeśli jesteś użytkownikiem chmury prywatnej , możesz zaktualizować właściwość
HTTP.ignore.allow_header.for.405natrue, aby uniemożliwić Apigee Edge zgłaszanie błędu502, nawet jeśli serwer backendu odpowiada kodem stanu405bez nagłówkaAllow, korzystając z instrukcji: Konfigurowanie właściwości ignore allow header for 405 w procesorach komunikatów. - Jeśli jesteś użytkownikiem chmury publicznej, skontaktuj się z zespołem pomocy Apigee Edge.
Specyfikacja
Apigee oczekuje odpowiedzi 405 Method Not Allowed z serwera backendu wraz
z nagłówkiem Allow zgodnie z tymi specyfikacjami:
| Specyfikacja | |
|---|---|
| RFC 7231, sekcja 6.5.5: 405 Method Not Allowed | |
| RFC 7231, sekcja 7.4.1: Allow |
Ważne uwagi
Zalecanym rozwiązaniem jest poprawienie serwera backendu, aby wysyłał kod stanu 405 z nagłówkiem Allow i przestrzegał specyfikacji
RFC 7231, sekcja 6.5.5: 405 Method Not Allowed.
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, zapoznaj się z sekcją Informacje diagnostyczne, które musisz zebrać.
Informacje diagnostyczne, które musisz zebrać
Jeśli problem będzie nadal występował nawet po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge.
Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa proxy interfejsu API
- Pełne polecenie
curlużyte do odtworzenia błędu502 Bad Gatewayz kodem błęduprotocol.http.Response405WithoutAllowHeader - Plik śledzenia żądań do interfejsu API
Jeśli jesteś użytkownikiem chmury prywatnej, podaj te informacje:
- Pełny komunikat o błędzie zaobserwowany w przypadku nieudanych żądań
- Nazwa środowiska
- Pakiet 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: ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.
- Logi systemowe procesora komunikatów
/opt/apigee/var/log/edge-message-processor/logs/system.log