Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
W odpowiedzi na wywołania interfejsu API aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway
z kodem błędu protocol.http.Response405WithoutAllowHeader
.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Oprócz tego może 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: Niedozwolona metoda 405, serwer pierwotny MUSI wygenerować i wysłać pole nagłówka Allow
w odpowiedzi 405
zawierającej listę obecnie obsługiwanych metod zasobu docelowego. Jeśli nie, Apigee w odpowiedzi wysyła 502 Bad Gateway
i kod błędu protocol.http.Response405WithoutAllowHeader
.
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Odpowiedź 405 bez zezwolenia 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 usługi Edge |
Najczęstsze kroki diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Zaloguj się w interfejsie Edge jako użytkownik z odpowiednią rolą.
Przełącz się na organizację, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz przedział czasu, w którym zaobserwowano błędy.
Porównaj kod błędu z czasem.
Wybierz komórkę z kodem błędu
protocol.http.Response405WithoutAllowHeader
, jak pokazano poniżej:Informacje o kodzie błędu
protocol.http.Response405WithoutAllowHeader
są wyświetlane jak poniżej:Aby wyświetlić więcej informacji, kliknij Wyświetl logi i rozwiń jedno z nieudanych żądań.
- 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 toprotocol.http.Response405WithoutAllowHeader
, oznacza to, że serwer backendu odpowiedział z kodem stanu405 Method Not Allowed
bez nagłówkaAllow
.
Narzędzie do śledzenia
Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:
- Włącz
sesję śledzenia i:
- Poczekaj na wystąpienie błędu
502 Bad Gateway
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby go odtworzyć – błąd
502 Bad Gateway
- Poczekaj na wystąpienie błędu
Sprawdź, czy opcja Show all FlowInfos (Pokaż wszystkie informacje) jest włączona:
- Wybierz 1 z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
Błąd zwykle pojawia się w przepływie po fazie Żądanie wysłane do serwera docelowego, jak pokazano poniżej:
Zapisz wartość błędu ze śledzenia.
Powyższy przykładowy log czasu pokazuje błąd jako
Received 405 Response without Allow Header
. Ponieważ błąd jest zgłaszany przez Apigee po wysłaniu żądania do serwera backendu, wskazuje to, że serwer backendu wysłał kod stanu odpowiedzi405
bez nagłówkaAllow
.- Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
Przewiń w dół do sekcji Error / Response Headers (Nagłówki błędów / odpowiedzi odpowiedzi) w panelu Szczegóły fazy i ustal 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
protocol.http.Response405WithoutAllowHeader
itarget
, wskazując, że ten błąd jest spowodowany tym, że backend wysłał kod stanu odpowiedzi405
bez nagłówkaAllow
.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-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, aby określić kluczowe informacje o błędach HTTP
502
. Sprawdź logi dostępu do 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 danym okresie wystąpiły jakieś błędy
502
z kodem błęduprotocol.http.Response405WithoutAllowHeader
(jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z502
. Jeśli znajdziesz błędy
502
z kodem X-Apigee-fault-code pasującym do wartościprotocol.http.Response405WithoutAllowHeader
, sprawdź wartość źródła błędów X-Apigee-fault-code .Przykładowy błąd 502 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma następujące wartości kodów X-Apigee- fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
Przyczyna: odpowiedź 405 bez zezwolenia na nagłówek z serwera backendu
Diagnostyka
- Określ kod błędu i źródło błędu dla instancji
502 Bad Gateway
za pomocą logów dostępu API Monitoring, narzędzia do śledzenia lub NGINX zgodnie z opisem w typowych krokach diagnostycznych. - Jeśli kod błędu to
protocol.http.Response405WithoutAllowHeader
, a źródło błędu ma wartośćtarget
, oznacza to, że serwer backendu odpowiedział z kodem stanu405
bez nagłówkaAllow
. Dlatego Apigee w odpowiedzi wysyła502 Bad Gateway
z kodem błęduprotocol.http.Response405WithoutAllowHeader
.
Rozdzielczość
Aby rozwiązać problem, użyj jednej z tych metod:
Serwer backendu
Opcja 1. Napraw serwer backendu, aby wysłać kod stanu 405 z nagłówkiem Zezwalaj:
Sprawdź, czy serwer backendu zawsze przestrzega specyfikacji RFC 7231, sekcja 6.5.5: Niedozwolona metoda 405 i wysyła z kodem stanu
405
, dołączając listę metod, które są dozwolone w nagłówkuAllow
, jak pokazano poniżej:Allow: HTTP_METHODS
- Jeśli na przykład serwer backendu zezwala na metody
GET
,POST
iHEAD
, musisz upewnić się, że nagłówekAllow
zawiera je w ten sposób:Allow: GET, POST, HEAD
Obsługa błędów
Opcja nr 2. Użyj opcji Obsługa błędów, aby wysłać kod stanu 405 z nagłówkiem Zezwalaj z serwera proxy interfejsu API:
Jeśli serwer backendu zwraca kod stanu 405
bez nagłówka Allow
, możesz skorzystać z obsługi błędów, aby przesłać odpowiedź kodem stanu 405
i nagłówkiem Allow
z serwera proxy interfejsu API w ten sposób:
Utwórz zasadę, taką jak zasada AssignMessage lub CauseFault, i ustaw kod stanu na
405
z nagłówkiemAllow
i 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 w
TargetEndpoint
elementFaultRule
, który będzie wywoływać zasadę po otrzymaniu błędu502
z kodem błęduprotocol.http.Response405WithoutAllowHeader
.Przykładowa konfiguracja TargetEndpoint z wyświetloną regułą 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ę.
- Wykonaj wywołania interfejsu API i sprawdź, czy otrzymujesz kod stanu
405
z nagłówkiemAllow
.
Skonfiguruj usługę
Opcja 3. Skonfiguruj właściwość w procesorze wiadomości, aby zapobiec zwracaniu przez Apigee Edge błędu 502
- Jeśli jesteś użytkownikiem Private Cloud, możesz zaktualizować właściwość
HTTP.ignore.allow_header.for.405
dotrue
, aby zapobiec zgłaszaniu przez Apigee Edge błędu502
, nawet jeśli serwer backendu odpowie z kodem stanu405
bez nagłówkaAllow
, zgodnie z instrukcją: Jak skonfigurować nagłówek ignorowania zezwolenia na kod 405 w procesorach wiadomości. - Jeśli jesteś użytkownikiem usługi Public Cloud , skontaktuj się z zespołem pomocy Apigee Edge
Specyfikacja
Apigee oczekuje odpowiedzi 405 Method Not Allowed
od serwera backendu wraz z nagłówkiem Allow
zgodnie z tymi specyfikacjami:
Specyfikacja | |
---|---|
RFC 7231, sekcja 6.5.5: Niedozwolona metoda 405 | |
RFC 7231, sekcja 7.4.1: Zezwalaj |
Najważniejsze kwestie
Zalecanym rozwiązaniem jest naprawienie serwera backendu tak, aby wysyłał kod stanu 405
z nagłówkiem Allow
, oraz przestrzeganie specyfikacji
RFC 7231, sekcja 6.5.5: Niedozwolona metoda 405.
Jeśli nadal będziesz potrzebować pomocy zespołu pomocy Apigee, przejdź do artykułu Musisz zebrać informacje diagnostyczne.
Musisz zebrać informacje diagnostyczne
Jeśli problem nie ustąpi mimo wykonania powyższych instrukcji, zbierz poniższe 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 serwera proxy interfejsu API
- Wykonaj polecenie
curl
użyte do odtworzenia elementu502 Bad Gateway
z kodem błęduprotocol.http.Response405WithoutAllowHeader
- Plik śledzenia żądań interfejsu API
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Zaobserwowany pełny komunikat o błędzie dotyczący nieudanych żądań
- Nazwa środowiska
- Pakiet proxy interfejsu API
- Plik śledzenia żądań 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 wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log