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.ResponseWithBody w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Dodatkowo 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 to
204 No Content lub 205 Reset Content, ale zawiera treść
odpowiedzi lub co najmniej 1 z tych nagłówków:
Content-LengthContent-EncodingTransfer-Encoding
Zgodnie ze specyfikacjami
RFC 7231, sekcja 6.3.5: 204 No Content i
RFC 7231, sekcja 6.3.6: 205 Reset Content, serwer pierwotny nie powinien wysyłać żadnej dodatkowej treści
w treści ładunku odpowiedzi z kodem stanu 204 No
Content lub 205 Reset Content. Nagłówki odpowiedzi
takie jak Content-Length, Content-Encoding lub
Transfer-Encoding wskazują rozmiar, typ lub format ładunku odpowiedzi.
Dlatego w tych okolicznościach Apigee Edge zwraca do klienta kod stanu 502 Bad Gateway z kodem błędu protocol.http.ResponseWithBody:
| Kod stanu z serwera backendu | ||
|---|---|---|
| Odpowiedź z serwera backendu zawiera | 204 No Content | 205 Reset Content |
| Treść odpowiedzi | BŁĄD | BŁĄD |
Nagłówek (ustawiony na wartość inną niż zero) |
BŁĄD | BŁĄD |
(ustawiony na obsługiwane kodowanie w Apigee Edge) |
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, których dotyczy |
|---|---|---|
| Treść odpowiedzi lub nagłówki z odpowiedzią 204 z serwera backendu | Serwer backendu wysyła odpowiedź 204 No Content lub 205 Reset Content
z treścią odpowiedzi lub co najmniej 1 z tych nagłówków: Content-Type,
Content-Encoding lub Transfer-Encoding. |
Użytkownicy Edge Public i Private Cloud |
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 Apigee 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.ResponseWithBodyjak pokazano poniżej:
Zobaczysz informacje o kodzie błędu
protocol.http.ResponseWithBodyjak pokazano poniżej:
Kliknij Wyświetl logi i rozwiń wiersz z nieudanym żądaniem.
- W oknie Logi zanotuj 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 Contentlub205 Reset Contentz treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny.
Narzędzie Trace
Aby zdiagnozować błąd za pomocą narzędzia Trace:
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Zaczekaj na wystąpienie błędu
502 Bad Gatewaylub - Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz błąd
502 Bad Gateway.
- Zaczekaj na wystąpienie błędu
Sprawdź, czy jest włączona opcja Pokaż wszystkie informacje o przepływie:
- Wybierz jedno z nieudanych żądań i sprawdź ślad.
- Przejdź przez różne etapy śledzenia i znajdź miejsce, w którym wystąpił błąd.
Zwykle błąd znajdziesz w
flowinfoError tuż po etapie Request sent to target server (Żądanie wysłane do serwera docelowego) jak pokazano poniżej:Scenariusz 1
Scenariusz 1. Serwer backendu odpowiada kodem stanu
204 No Contentzawierającym treść odpowiedzi lub jeden z nagłówków wymienionych w sekcji Możliwe przyczyny.
Zanotuj te wartości ze śladu:
- error:
Received 204 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
Scenariusz 2
Scenariusz 2. Serwer backendu odpowiada kodem stanu
204 No Contentzawierającym treść odpowiedzi lub jeden z nagłówków wymienionych w sekcji Możliwe przyczyny.
Zanotuj te wartości ze śladu:
- error:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- error:
- W śladzie otwórz etap AX (Analytics Data Recorded) i kliknij go.
Przewiń w dół do sekcji Phase Details (Szczegóły etapu) i Error Headers (Nagłówki błędów) i określ wartości X-Apigee-fault-code i X-Apigee-fault-source jak pokazano poniżej:
- Zwróć uwagę, że wartości X-Apigee-fault-code i X-Apigee-fault-source
are protocol.http.ResponseWithBodyitargetodpowiednio. Oznacza to, że błąd wystąpił, ponieważ serwer backendu wysłał kod stanu204 No Contentlub205 Reset Contentz treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny.Błąd Wartość X-Apigee-fault-code protocol.http.ResponseWithBodyX-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łędzie HTTP
502 Bad Gateway. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: ORG, ENV 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.ResponseWithBodylub czy nadal występują żądania, które kończą się niepowodzeniem z kodem502. Jeśli znajdziesz błędy
502z X-Apigee-fault-code pasującym do wartościprotocol.http.ResponseWithBody, 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.ResponseWithBodyX-Apigee-fault-source target- Zwróć uwagę, że wartości X-Apigee-fault-code i X-Apigee-fault-source
to odpowiednio
protocol.http.ResponseWithBodyitarget. Oznacza to, że błąd wystąpił, ponieważ serwer backendu wysłał kod stanu204 No Contentlub205 Reset Contentz treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny.
Przyczyna: treść odpowiedzi lub nagłówki z odpowiedzią 204 z serwera backendu
Diagnostyka
- Określ Kod błędu i Źródło błędu zaobserwowanego błędu za pomocą monitorowania interfejsów API , narzędzia Trace lub logów dostępu NGINX zgodnie z opisem w sekcji Typowe czynności diagnostyczne.
- 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 Contentlub205 Reset Contentz treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny. Aby sprawdzić, czy serwer backendu rzeczywiście wysłał treść ładunku odpowiedzi lub co najmniej 1 z nagłówków wymienionych w sekcji Możliwe przyczyny, wykonaj te czynności:
Jeśli jesteś użytkownikiem chmury publicznej i możesz wysłać to samo żądanie do interfejsu API bezpośrednio z dowolnego systemu.
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz wysłać to samo żądanie do interfejsu API bezpośrednio z jednego z procesorów komunikatów powiązanych z konkretną organizacją i środowiskiem, w którym wystąpił błąd.
Sprawdź odpowiedź otrzymaną z serwera backendu i upewnij się, że zawiera ona a treść ładunku odpowiedzi lub co najmniej 1 z wymienionych powyżej nagłówków. Jeśli tak, to jest to przyczyna tego błędu.
Przykład 1
Przykład 1. Odpowiedź serwera backendu 204 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ł kodem stanu
204 No ContentiContent-Encoding: gzipPrzykł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ł z
204 No Contentkodem stanu iContent-Length: 48Przykł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 ResponseW tym przykładzie serwer backendu odpowiedział z
205 Reset Contentkodem stanu z treścią odpowiedziThis is a sample Response.- We wszystkich powyższych przykładach serwer backendu wysłał
204 No Contentlub205 Reset Contentkod stanu z treścią odpowiedzi lub jednym z nagłówków wymienionych w sekcji Możliwe przyczyny. - Dlatego Apigee Edge wysłał
502 Bad Gatewaykod stanu z kodem błęduprotocol.http.ResponseWithBody.
Rozdzielczość
Upewnij się, że serwer backendu zawsze przestrzega specyfikacji
RFC 7231, sekcja 6.3.6: 205 Reset Content, gdy wysyła odpowiedź 204 No Content
lub 205 Reset Content do Apigee Edge. Oznacza to, że serwer backendu
NIE MOŻE wysyłać tych elementów w ramach odpowiedzi 204 No Content lub
205 Reset Content:
- Treść ładunku odpowiedzi
- I dowolny z tych nagłówków:
Content-LengthContent-EncodingTransfer-Encoding
Specyfikacja
Apigee Edge odpowiada kodem stanu 502 Bad Gateway i kodem błędu
protocol.http.ResponseWithBody jeśli serwer backendu wysyła odpowiedź
204 No Content lub 205 Reset Content ale
nie przestrzega tych specyfikacji RFC:
| Specyfikacja |
|---|
| RFC 7231, sekcja 6.3.5: 204 No Content |
| RFC 7231, sekcja 6.3.6: 205 Reset Content |
Ważne uwagi
Zalecamy naprawienie serwera backendu, aby wysyłał kod stanu 204 No Content
i 205 Reset Content bez treści odpowiedzi i bez żadnego z tych
nagłówków: Content-Length, Content-Encoding i
Transfer-Encoding, oraz aby przestrzegał specyfikacji
RFC 7231, sekcja 6.3.5: 204 No Content i
RFC 7231, sekcja 6.3.6: 205 Reset Content.
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ć
Zbierz te informacje diagnostyczne, a potem 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 - 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~ENV.PORT#_access_logGdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Dzienniki systemowe procesora komunikatów
/opt/apigee/var/log/edge-message-processor/logs/system.log