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.Response405WithoutAllowHeader
jak pokazano poniżej:Informacje o kodzie błędu
protocol.http.Response405WithoutAllowHeader
jak 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 Allowed
bez 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 Gateway
lub - Jeśli możesz odtworzyć problem, wywołaj interfejs API, aby odtworzyć problem.
502 Bad Gateway
błą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 odpowiedzi405
bez 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 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.Response405WithoutAllowHeader
itarget
odpowiednio, wskazujący, ż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 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.Response405WithoutAllowHeader
w konkretnym okresie (jeśli w przeszłości) lub jeśli jakieś żądania nadal kończą się niepowodzeniem502
Jeśli znajdziesz błędy
502
w 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.Response405WithoutAllowHeader
X-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 Gateway
przy 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.Response405WithoutAllowHeader
i Źródło błędu ma wartośćtarget
, oznacza to, że serwer backendu ma odpowiedział(a) kodem stanu405
bez nagłówkaAllow
. Dlatego Apigee wysyła odpowiedź z kodem błędu502 Bad Gateway
protocol.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
405
przez dodanie listy metod, które są dozwolone w nagłówkuAllow
jak poniżej:Allow: HTTP_METHODS
- Jeśli na przykład serwer backendu zezwala na
GET
,POST
iHEAD
, musisz upewnić się, że nagłówekAllow
zawiera w następujący sposób:Allow: GET, POST, HEAD
Obsługa awarii
Opcja 2. Użyj usługi obsługi błędów, 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
405
z nagłówkiemAllow
i 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
FaultRule
wTargetEndpoint
, który wywołuje zasadę. po wyświetleniu błędu502
z kodem błęduprotocol.http.Response405WithoutAllowHeader
Przykł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
405
za 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.405
dotrue
, aby uniemożliwić Apigee Edge powoduje zgłaszanie błędu502
, nawet jeśli serwer backendu odpowiada405
kodu stanu bez nagłówkaAllow
. , Konfiguruję nagłówek ignorowania zezwalania dla właściwości 405 w usługach 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
curl
użyte do odtworzenia502 Bad Gateway
z 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