502 Nieprawidłowa brama – ResponseWithBody

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

Content-Length nagłówek

(wartość różna od 0)

BŁĄD BŁĄD

Content-Encoding

(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:

  1. Zaloguj się w interfejsie Apigee Edge jako użytkownik z uprawnieniami odpowiednią rolę.
  2. Przełącz się na organizację, w której chcesz zbadać problem.

  3. Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
  4. Wybierz okres, w którym zaobserwowano błędy.
  5. Porównaj Kod błędu z czasem.
  6. Wybierz komórkę, która ma kod błędu protocol.http.ResponseWithBody jako poniżej:

    ( wyświetl większy obraz)

  7. Pojawi się informacja o kodzie błędu protocol.http.ResponseWithBody jak pokazano poniżej:

    ( wyświetl większy obraz)

  8. Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.

    ( wyświetl większy obraz)

  9. W oknie Logi zwróć uwagę na te informacje:
    • Kod stanu: 502
    • Źródło błędu: target
    • Kod błędu: protocol.http.ResponseWithBody.
  10. 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 stanu 204 No Content lub 205 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:

  1. Włącz sesję śledzenia. oraz:
    1. Poczekaj na wystąpienie błędu 502 Bad Gateway. lub
    2. Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz błąd 502 Bad Gateway.
  2. Sprawdź, czy opcja Show all FlowInfos jest włączona:

  3. Wybierz jedno z nieudanych żądań i sprawdź log czasu.
  4. Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd .
  5. 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
  6. Przejdź do fazy AX (zarejestrowane dane Analytics) w śledzeniu i kliknij ją.
  7. 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:

    ( wyświetl większy obraz)

  8. Zwróć uwagę na wartości X-Apigee-fault-code i X-Apigee-fault-source are protocol.http.ResponseWithBody i target. Oznacza to, że wystąpił błąd, ponieważ serwer backendu wysłał kod stanu 204 No Content lub 205 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:

  1. 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.
  2. 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.

  3. Wyszukaj błędy (502) z kodem błędu protocol.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ę niepowodzeniem 502
  4. Jeśli znajdziesz błędy 502 z kodem błędu X-Apigee-fault-code pasujące do wartości protocol.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
  5. Zwróć uwagę na wartości X-Apigee-fault-code i X-Apigee-fault-source to odpowiednio protocol.http.ResponseWithBody i target. Oznacza to, że wystąpił błąd, ponieważ serwer backendu wysłał kod stanu 204 No Content lub 205 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

  1. 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.
  2. 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 stanem 204 No Content lub 205 Reset Content z treścią odpowiedzi lub jednym z nagłówków wymienionych w Możliwe przyczyny.
  3. 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:

    1. 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.

    2. 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.
    3. 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-alive
      

      W tym przykładzie serwer backendu odpowiedział żądaniem 204 No Content kod stanu i Content-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-alive
      

      W tym przykładzie serwer backendu odpowiedział żądaniem 204 No Content kod stanu i Content-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ą odpowiedzi This is a sample Response.

    4. We wszystkich powyższych przykładach serwer backendu wysłał żądanie 204 No Content lub Kod stanu 205 Reset Content z treścią odpowiedzi lub jednym z nagłówków wymienione w sekcji Możliwe przyczyny.
    5. Dlatego usługa Apigee Edge wysłała kod stanu 502 Bad Gateway z kodem błędu protocol.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ź:

  1. Treść ładunku odpowiedzi
  2. Oraz dowolny z tych nagłówków:
    1. Content-Length
    2. Content-Encoding
    3. 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łędu 502
  • 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