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.ResponseWithBody
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ć 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
204 No Content
lub 205 Reset Content
, ale zawiera odpowiedź
treści 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 treści oraz
RFC 7231, sekcja 6.3.6: 205 Reset Content (Resetuj zawartość) nie powinny zawierać żadnych dodatkowych treści
powinna być wysłana przez serwer pierwotny jako część treści ładunku odpowiedzi z kodem stanu 204 No
Content
lub 205 Reset Content
. Nagłówki odpowiedzi
na przykład Content-Length
, Content-Encoding
lub
Transfer-Encoding
wskazują rozmiar, typ lub format ładunku odpowiedzi.
Dlatego Apigee Edge zwraca kod stanu 502 Bad Gateway
z wartością
kod błędu protocol.http.ResponseWithBody
do klienta zgodnie z tymi warunkami
okoliczności:
Kod stanu z serwera backendu | ||
---|---|---|
Odpowiedź z serwera backendu zawiera | 204 Brak treści | 205 Zresetuj zawartość |
Treść odpowiedzi | BŁĄD | BŁĄD |
(wartość różna od 0) |
BŁĄD | BŁĄD |
(ustaw na obsługiwane kodowanie w Apigee Edge) |
BŁĄD | BRAK BŁĘDÓW |
Transfer-Encoding |
BŁĄD | BŁĄD |
Oto możliwe przyczyny tego błędu:
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Treść odpowiedzi lub nagłówki z odpowiedzią 204 z serwera backendu | Serwer backendu wysyła żądanie 204 No Content lub 205 Reset Content
odpowiedź z treścią odpowiedzi i/lub co najmniej jednym nagłówkiem Content-Type ,
Content-Encoding lub Transfer-Encoding . |
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 Apigee 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 ma kod błędu
protocol.http.ResponseWithBody
jako poniżej:Pojawi się informacja o kodzie błędu
protocol.http.ResponseWithBody
jak pokazano 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ści
target
i Błąd Kod ma wartośćprotocol.http.ResponseWithBody
, a następnie wskazuje, że wystąpił błąd, ponieważ serwer backendu wysłał kod stanu204 No Content
lub205 Reset Content
z treść odpowiedzi i/lub jeden z nagłówków wymienionych w Możliwe przyczyny.
Narzędzie śledzenia
Aby zdiagnozować błąd za pomocą narzędzia śledzenia:
- Włącz sesję śledzenia.
oraz:
- Poczekaj na wystąpienie błędu
502 Bad Gateway
. lub - Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz błąd
502 Bad Gateway
.
- Poczekaj na wystąpienie błędu
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 .
Zazwyczaj błąd pojawia się w sekcji
flowinfo
Błąd po prostu po fazie wysyłania żądania do serwera docelowego, jak pokazano poniżej:Scenariusz 1
Scenariusz 1. Serwer backendu odpowiada kodem stanu
204 No Content
zawierających treść odpowiedzi lub jeden z nagłówków wymienionych w Możliwe przyczyny.Zanotuj 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 Pole
204 No Content
zawiera treść odpowiedzi lub jeden z nagłówków wymienionych w sekcji Możliwe przyczyny.Zanotuj 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 fazy AX (zarejestrowane dane Analytics) w śledzeniu i kliknij ją.
Przewiń w dół do sekcji Phase Details (Szczegóły etapu), Error Headers (Nagłówki błędów). Wyznacz wartości X-Apigee-fault-code i X-Apigee-fault-source jak poniżej:
- Zwróć uwagę na wartości X-Apigee-fault-code i X-Apigee-fault-source
are protocol.http.ResponseWithBody
itarget
. Oznacza to, że wystąpił błąd, ponieważ serwer backendu wysłał kod stanu204 No Content
lub205 Reset Content
ze znakiem treść odpowiedzi lub jeden z nagłówków wymienionych w sekcji Możliwe przyczyny.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żywać logów dostępu NGINX do:
określić kluczowe informacje o tagu HTTP
502 Bad Gateway
. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: wartości ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Wyszukaj błędy (
502
) z kodem błęduprotocol.http.ResponseWithBody
w określonym czasie (jeśli problem wystąpił w przeszłości) lub jeśli masz jakieś żądania, które nadal kończą się niepowodzeniem502
Jeśli znajdziesz błędy
502
z kodem błędu X-Apigee-fault-code pasujące do wartościprotocol.http.ResponseWithBody
, a następnie określ wartość X-Apigee-fault-source.Przykładowy błąd 502 z dziennika dostępu NGINX:
Powyższy przykładowy wpis logu dostępu NGINX zawiera następujące wartości dla X- Kod błędu Apigee i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- Zwróć uwagę na 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
ze znakiem treść odpowiedzi lub jeden 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 dla błędu zaobserwowanego za pomocą interfejsu API. Logi monitorowania, narzędzia śledzenia lub logi dostępu NGINX zgodnie z opisem w artykule Najczęstsze czynności diagnostyczne.
- Jeśli kod błędu to
protocol.http.ResponseWithBody
i Źródło błędu ma wartośćtarget
, co oznacza, że backend serwer odpowiedział ze stanem204 No Content
lub205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienionych w Możliwe przyczyny. Aby sprawdzić, czy serwer backendu rzeczywiście wysłał treść ładunku odpowiedzi i/lub niektóre lub więcej nagłówków wymienionych w sekcji Możliwe przyczyny, możesz wykonaj te czynności:
Jeśli jesteś użytkownikiem Public Cloud Cloud i możesz wysłać to samo żądanie do interfejsu API serwera backendu bezpośrednio z dowolnego systemu.
- Jeśli jesteś użytkownikiem Private Cloud, możesz wysłać to samo żądanie do interfejsu API serwera backendu bezpośrednio z jednego z procesorów wiadomości powiązanych z danym organizacji i środowiska, w którym zaobserwowano błąd.
Sprawdź odpowiedź otrzymaną z serwera backendu i upewnij się, że zawiera ona treść ładunku odpowiedzi lub co najmniej jeden z wymienionych wyżej nagłówków. Jeśli tak, to przyczyny 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ł żądaniem
204 No Content
kod stanu iContent-Encoding: gzip
.Przykład 2
Przykład 2. Odpowiedź serwera backendu 204 z nagłówkiem o długości treści
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ł żądaniem
204 No Content
kod stanu iContent-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ł żądaniem Kod stanu
205 Reset Content
z treścią odpowiedziThis is a sample Response.
- We wszystkich powyższych przykładach serwer backendu wysłał żądanie
204 No Content
lub Kod stanu205 Reset Content
z treścią odpowiedzi lub jednym z nagłówków wymienione 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ść
Zadbaj o to, aby serwer backendu zawsze przestrzegał specyfikacji
RFC 7231, sekcja 6.3.6: 205 Reset Content (Resetuj zawartość) podczas wysyłania 204 No Content
lub 205 Reset Content
odpowiedź na Apigee Edge. Oznacza to, że serwer backendu
NIE MOŻE wysyłać następujących danych w ramach 204 No Content
ani
205 Reset Content
odpowiedź:
- Treść ładunku odpowiedzi
- Oraz dowolny z tych nagłówków:
Content-Length
Content-Encoding
Transfer-Encoding
Specyfikacja
Apigee Edge wysyła w odpowiedzi 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 następującymi specyfikacjami RFC:
Specyfikacja |
---|
RFC 7231, sekcja 6.3.5: 204 Brak treści |
RFC 7231, sekcja 6.3.6: 205 Reset Content |
Najważniejsze kwestie
Zalecanym rozwiązaniem jest naprawienie błędu serwera backendu, aby wysyłał on żądanie 204 No Content
i kodu stanu 205 Reset Content
bez treści odpowiedzi i żadnych
nagłówki – Content-Length
, Content-Encoding
i
Transfer-Encoding
i zgodne ze specyfikacją
RFC 7231, sekcja 6.3.5: 204 Brak treści oraz
,
RFC 7231, sekcja 6.3.6: 205 Reset Content (Zresetowanie treści).
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, wejdź na Konieczne jest zbieranie informacji diagnostycznych.
Musi zbierać informacje diagnostyczne
Zbierz te 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 odtworzenia błędu502
- 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 serwera proxy interfejsu API
- Plik śledzenia żądań do 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 przez wartości rzeczywiste.
- Dzienniki systemowe procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log