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.ResponseWithBody
.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Oprócz tego możesz zobaczyć jeden z tych komunikatów o błędach:
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
Możliwe przyczyny
Ten błąd występuje, jeśli odpowiedź HTTP z serwera backendu do Apigee Edge ma postać 204 No Content
albo 205 Reset Content
, ale zawiera treść odpowiedzi lub co najmniej jeden z tych nagłówków:
Content-Length
Content-Encoding
Transfer-Encoding
Zgodnie ze specyfikacją
RFC 7231, sekcja 6.3.5: 204 Brak zawartości oraz
RFC 7231, sekcja 6.3.6: 205 Resetowanie treści, oczekuje się, że z serwera pierwotnego nie powinny być wysyłane żadne dodatkowe treści z kodem stanu 204 No
Content
lub 205 Reset Content
. Nagłówki odpowiedzi, np. Content-Length
, Content-Encoding
lub Transfer-Encoding
, wskazują rozmiar, typ lub format ładunku odpowiedzi.
Dlatego Apigee Edge zwraca klientowi kod stanu 502 Bad Gateway
z kodem błędu protocol.http.ResponseWithBody
w tych sytuacjach:
Kod stanu z serwera backendu | ||
---|---|---|
Odpowiedź z serwera backendu zawiera | 204 Brak treści | 205 Resetuj zawartość |
Treść odpowiedzi | BŁĄD | BŁĄD |
(ustaw wartość inną niż 0) |
BŁĄD | BŁĄD |
|
BŁĄD | BRAK BŁĘDU |
Transfer-Encoding |
BŁĄD | BŁĄD |
Oto możliwe przyczyny tego błędu:
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Treść lub nagłówki odpowiedzi z odpowiedzią 204 z serwera backendu | Serwer backendu wysyła odpowiedź 204 No Content lub 205 Reset Content z treścią odpowiedzi lub z nagłówkami Content-Type , Content-Encoding lub Transfer-Encoding . |
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 Apigee 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.ResponseWithBody
, jak pokazano poniżej:Informacje o kodzie błędu
protocol.http.ResponseWithBody
wyświetlą się poniżej:Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zwróć uwagę na te informacje:
- Kod stanu:
502
- Źródło błędu:
target
- Kod błędu:
protocol.http.ResponseWithBody
.
- Kod stanu:
- Jeśli źródło błędu ma wartość
target
, a kod błędu ma wartośćprotocol.http.ResponseWithBody
, oznacza to, że błąd wystąpił, ponieważ serwer backendu wysłał kod stanu204 No Content
lub205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny.
Narzędzie do śledzenia
Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj na wystąpienie błędu
502 Bad Gateway
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API i odtwórz 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 występuje zwykle w sekcji Błąd
flowinfo
tuż po etapie Żądanie wysłane do serwera docelowego, jak pokazano poniżej:Scenariusz 1
Scenariusz 1. Serwer backendu odpowiada kodem stanu
204 No Content
, zawierającym treść odpowiedzi lub jeden z nagłówków wymienionych w sekcji Możliwe przyczyny.Zapisz te wartości ze logu czasu:
- błąd:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
Scenariusz 2
Scenariusz 2. Serwer backendu odpowiada kodem stanu
204 No Content
, który zawiera treść odpowiedzi lub jeden z nagłówków wymienionych w możliwych przyczynach.Zapisz te wartości ze logu czasu:
- błąd:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- błąd:
- Przejdź do etapu AX (rejestrowane dane Analytics) w logu czasu i kliknij go.
Przewiń w dół do sekcji Szczegóły fazy i Nagłówki błędów i określ wartości w polach X-Apigee-fault-code oraz X-Apigee-fault-source, jak pokazano poniżej:
- Zwróć uwagę na wartości odpowiednio X-Apigee-fault-code i X-Apigee-fault-source
are protocol.http.ResponseWithBody
oraztarget
. Oznacza to, że wystąpił błąd, ponieważ serwer backendu wysłał kod stanu204 No Content
lub205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienionych w możliwych przyczynach.Błąd Wartość X-Apigee-fault-code protocol.http.ResponseWithBody
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 kluczowych informacji o HTTP
502 Bad Gateway
. Sprawdź logi dostępu do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy występują jakieś błędy
502
z kodem błęduprotocol.http.ResponseWithBody
w danym czasie (jeśli problem wystąpił w przeszłości) lub czy są nadal jakieś żądania, które kończą się niepowodzeniem z502
. Jeśli znajdziesz błędy
502
z kodem X-Apigee-fault-code zgodnym z wartościąprotocol.http.ResponseWithBody
, sprawdź wartość źródła błędów X-Apigee.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 kodu X- Apigee-fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- Zwróć uwagę, że wartości X-Apigee-fault-code i X-Apigee-fault-source to odpowiednio
protocol.http.ResponseWithBody
itarget
. Oznacza to, że wystąpił błąd, ponieważ serwer backendu wysłał kod stanu204 No Content
lub205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienionych w możliwych przyczynach.
Przyczyna: treść odpowiedzi lub nagłówki z odpowiedzią 204 z serwera backendu
Diagnostyka
- Znajdź kod błędu i źródło błędu dla błędu zaobserwowanego przy użyciu logów dostępu API monitorowania, narzędzia do śledzenia lub NGINX zgodnie z opisem w częstych krokach diagnostyki.
- Jeśli kod błędu to
protocol.http.ResponseWithBody
, a źródło błędu ma wartośćtarget
, oznacza to, że serwer backendu odpowiedział kodem stanu204 No Content
lub205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny. Aby sprawdzić, czy serwer backendu faktycznie wysłał treść ładunku odpowiedzi lub co najmniej jeden z nagłówków wymienionych w sekcji Możliwe przyczyny, możesz wykonać te czynności:
Jeśli jesteś użytkownikiem chmury publicznej i możesz wysłać to samo żądanie interfejsu API do serwera backendu bezpośrednio z dowolnego ze swoich systemów.
- Jeśli jesteś użytkownikiem Private Cloud, możesz wysłać to samo żądanie interfejsu API do serwera backendu bezpośrednio z jednego z procesorów wiadomości powiązanych z konkretną organizacją i środowiskiem, w którym zaobserwowano błąd.
Sprawdź odpowiedź otrzymaną z serwera backendu i sprawdź, czy zawiera ona treść ładunku odpowiedzi lub co najmniej jeden z wymienionych powyżej nagłówków. Jeśli tak, to jest przyczyną tego błędu.
Przykład 1
Przykład 1. Odpowiedź 204 serwera backendu z nagłówkiem Content-Encoding
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveW tym przykładzie serwer backendu odpowiedział, wysyłając kod stanu
204 No Content
, a kod stanuContent-Encoding: gzip
Przykład 2
Przykład 2. Odpowiedź serwera backendu 204 z nagłówkiem Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveW tym przykładzie serwer backendu odpowiedział, wysyłając kod stanu
204 No Content
, a kod stanuContent-Length: 48
Przykład 3
Przykład 3. Odpowiedź serwera backendu 205 z treścią odpowiedzi
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
W tym przykładzie serwer backendu odpowiedział kodem stanu
205 Reset Content
z treścią odpowiedziThis is a sample Response.
- We wszystkich powyższych przykładach serwer backendu wysłał kod stanu
204 No Content
lub205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny. - Dlatego usługa Apigee Edge wysłała kod stanu
502 Bad Gateway
z kodem błęduprotocol.http.ResponseWithBody
.
Rozdzielczość
Podczas wysyłania odpowiedzi 204 No Content
lub 205 Reset Content
do Apigee Edge serwer backendu musi zawsze przestrzegać specyfikacji
RFC 7231, sekcja 6.3.6: 205 Resetuj zawartość. Oznacza to, że serwer backendu NIE MOŻE wysyłać następujących treści w odpowiedzi 204 No Content
ani 205 Reset Content
:
- Treść ładunku odpowiedzi
- i dowolny z tych nagłówków:
Content-Length
Content-Encoding
Transfer-Encoding
Specyfikacja
Apigee Edge w odpowiedzi wysyła kod stanu 502 Bad Gateway
i kod błędu protocol.http.ResponseWithBody
, jeśli serwer backendu wysyła odpowiedź 204 No Content
lub 205 Reset Content
, ale nie jest zgodna z tymi specyfikacjami RFC:
Specyfikacja |
---|
RFC 7231, sekcja 6.3.5: 204 Brak treści |
RFC 7231, sekcja 6.3.6: 205 Resetuj zawartość |
Najważniejsze kwestie
Zalecanym rozwiązaniem jest naprawienie serwera backendu, tak aby wysyłał kod stanu 204 No Content
i 205 Reset Content
bez treści odpowiedzi oraz nagłówków – Content-Length
, Content-Encoding
i Transfer-Encoding
, oraz przestrzeganie specyfikacji
RFC 7231, sekcja 6.3.5: 204 Brak zawartości i
RFC 7231, sekcja 6.3.6: 205 Resetuj zawartość.
Jeśli nadal będziesz potrzebować pomocy zespołu pomocy Apigee, przejdź do artykułu Wymagane jest zbieranie informacji diagnostycznych.
Musisz zebrać informacje diagnostyczne
Zbierz te informacje diagnostyczne, a następnie 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 błędu502
- 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 API
- Plik śledzenia żądań interfejsu API
Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Dzienniki systemowe procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log