502 Nieprawidłowa brama – odpowiedź 405 bez nagłówka nagłówka

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.Response405WithoutAllowHeader w odpowiedzi na wywołania interfejsu API.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 502 Bad Gateway

Może też pojawić się ten 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 kodem stanu 405 Method Not Allowed bez nagłówka Allow.

Zgodnie ze specyfikacją RFC 7231, sekcja 6.5.5: 405 Method Not Allowed, oczekuje się, że serwer pierwotny MUSI wygenerować i wysłać pole nagłówka Allow w odpowiedzi 405 zawierającej listę obecnie obsługiwanych metod zasobu docelowego. W przeciwnym razie Apigee odpowiada kodem 502 Bad Gateway i kodem błędu protocol.http.Response405WithoutAllowHeader.

Przyczyna Opis Instrukcje rozwiązywania problemów, których dotyczy
Odpowiedź 405 bez nagłówka Allow 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 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:

  1. Zaloguj się w interfejsie Edge jako użytkownik z odpowiednią rolą.
  2. Przejdź do organizacji, w której chcesz zbadać problem.

    menu organizacji,
  3. Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
  4. Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
  5. Wykreśl Kod błędu względem Czasu.

  6. Wybierz komórkę z kodem błędu protocol.http.Response405WithoutAllowHeader jak pokazano poniżej:

  7. Informacje o kodzie błędu protocol.http.Response405WithoutAllowHeader są wyświetlane jak poniżej:

  8. Kliknij Wyświetl logi i rozwiń jedno z nieudanych żądań, aby wyświetlić więcej informacji.

  9. W oknie Logi zanotuj te informacje:
    • Kod stanu: 502
    • Źródło błędu: target
    • Kod błędu: protocol.http.Response405WithoutAllowHeader.
  10. Jeśli Źródło błędu to target, a Kod błędu to protocol.http.Response405WithoutAllowHeader, oznacza to, że serwer backendu odpowiedział kodem stanu 405 Method Not Allowed bez nagłówka Allow.

Narzędzie Trace

Aby zdiagnozować błąd za pomocą narzędzia Trace:

  1. Włącz sesję śledzenia i:
    • poczekaj na wystąpienie błędu 502 Bad Gateway lub
    • jeśli możesz odtworzyć problem, wywołaj interfejs API, aby go odtworzyć – 502 Bad Gateway błąd
  2. Sprawdź, czy jest włączona opcja Pokaż wszystkie informacje o przepływach:

  3. Wybierz jedno z nieudanych żądań i sprawdź ślad.
  4. Przejdź przez różne etapy śledzenia i znajdź miejsce, w którym wystąpił błąd.
  5. Błąd zwykle występuje w przepływie po etapie Żądanie wysłane do serwera docelowego , jak pokazano poniżej:

  6. Zanotuj wartość błędu ze śladu.

    Powyższy przykładowy ślad pokazuje błąd Received 405 Response without Allow Header. Ponieważ błąd jest zgłaszany przez Apigee po wysłaniu żądania do serwera backendu oznacza to, że serwer backendu wysłał kod stanu odpowiedzi 405 bez nagłówka Allow.

  7. W śladzie otwórz etap AX (Zapisane dane Analytics) i kliknij go.
  8. W panelu Szczegóły etapu przewiń w dół do sekcji Błędy / Nagłówki odpowiedzi i określ wartości X-Apigee-fault-code i X-Apigee-fault-source , jak pokazano poniżej:

  9. Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source odpowiednio jako protocol.http.Response405WithoutAllowHeader i target, co oznacza, że ten błąd jest spowodowany tym, że backend wysłał kod stanu odpowiedzi 405 bez nagłówka Allow.
    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

Aby zdiagnozować błąd za pomocą logów dostępu NGINX:

  1. Jeśli jesteś użytkownikiem chmury prywatnej, możesz użyć logów dostępu NGINX, aby określić kluczowe informacje o błędach HTTP 502.
  2. Sprawdź logi dostępu NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    Gdzie: ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.

  3. Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) nie ma błędów 502 z kodem błędu protocol.http.Response405WithoutAllowHeader lub czy nadal występują błędy 502.
  4. Jeśli znajdziesz błędy 502 z X-Apigee-fault-code pasującym do wartości protocol.http.Response405WithoutAllowHeader, 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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

Przyczyna: odpowiedź 405 bez nagłówka Allow z serwera backendu

Diagnostyka

  1. Określ Kod błędu i Źródło błędu dla 502 Bad Gateway za pomocą monitorowania interfejsów API, narzędzia Trace lub logów dostępu NGINX, jak opisano w Typowe czynności diagnostyczne.
  2. Jeśli Kod błędu to protocol.http.Response405WithoutAllowHeader, a Źródło błędu ma wartość target, oznacza to, że serwer backendu odpowiedział kodem stanu 405 bez nagłówka Allow. Dlatego Apigee odpowiada kodem 502 Bad Gateway z kodem błędu protocol.http.Response405WithoutAllowHeader.

Rozdzielczość

Aby rozwiązać ten problem, użyj jednej z tych metod:

Serwer backendu

Opcja 1. Popraw serwer backendu, aby wysyłał kod stanu 405 z nagłówkiem Allow:

  1. Upewnij się, że serwer backendu zawsze przestrzega specyfikacji RFC 7231, sekcja 6.5.5: 405 Method Not Allowed i wysyła kod stanu 405 , dołączając listę dozwolonych metod w nagłówku Allow , jak pokazano poniżej:

    Allow: HTTP_METHODS
  2. Jeśli np. serwer backendu zezwala na metody GET, POST i HEAD, musisz się upewnić, że nagłówek Allow zawiera je w ten sposób:
    Allow: GET, POST, HEAD

Obsługa błędów

Opcja 2. Użyj obsługi błędów, aby wysłać kod stanu 405 z nagłówkiem Allow z proxy interfejsu API:

Jeśli serwer backendu zwraca kod stanu 405 bez nagłówka Allow , możesz użyć obsługi błędów, aby odpowiedzieć kodem stanu 405 i nagłówkiem Allow z proxy interfejsu API w ten sposób:

  1. Utwórz zasadę, np. AssignMessage lub RaiseFault i ustaw kod stanu na 405 z nagłówkiem Allow i niestandardowym komunikatem.

    Przykładowa zasada AssignMessage do wysyłania kodu 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>
  2. Utwórz FaultRule w TargetEndpoint, który wywołuje zasadę po otrzymaniu błędu 502 z kodem błędu protocol.http.Response405WithoutAllowHeader.

    Przykładowa konfiguracja TargetEndpoint pokazująca FaultRule:

    <TargetEndpoint name="default">
    ...
        <FaultRules>
           <FaultRule name="405WithoutAllowHeader">
                <Step>
                    <Name>AM-405WithAllowHeader</Name>
                </Step>
                <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition>
            </FaultRule>
        </FaultRules>
  3. Zapisz te zmiany w nowej wersji proxy interfejsu API i wdróż tę wersję.
  4. Wywołaj interfejs API i sprawdź, czy otrzymujesz kod stanu 405 z nagłówkiem Allow.

Konfigurowanie usługi

Opcja 3. Skonfiguruj właściwość w procesorze komunikatów, aby uniemożliwić Apigee Edge zwracanie błędu 502

  1. Jeśli jesteś użytkownikiem chmury prywatnej , możesz zaktualizować właściwość HTTP.ignore.allow_header.for.405 na true , aby uniemożliwić Apigee Edge zgłaszanie błędu 502 , nawet jeśli serwer backendu odpowiada kodem stanu 405 bez nagłówka Allow , korzystając z instrukcji: Konfigurowanie właściwości ignore allow header for 405 w procesorach komunikatów.
  2. Jeśli jesteś użytkownikiem chmury publicznej, skontaktuj się z zespołem pomocy Apigee Edge.

Specyfikacja

Apigee oczekuje odpowiedzi 405 Method Not Allowed z serwera backendu wraz z nagłówkiem Allow zgodnie z tymi specyfikacjami:

Specyfikacja
RFC 7231, sekcja 6.5.5: 405 Method Not Allowed
RFC 7231, sekcja 7.4.1: Allow

Ważne uwagi

Zalecanym rozwiązaniem jest poprawienie serwera backendu, aby wysyłał kod stanu 405 z nagłówkiem Allow i przestrzegał specyfikacji RFC 7231, sekcja 6.5.5: 405 Method Not Allowed.

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ć

Jeśli problem będzie nadal występował nawet po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i 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 curl użyte do odtworzenia błędu 502 Bad Gateway z kodem błędu protocol.http.Response405WithoutAllowHeader
  • 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~ORG.PORT#_access_log

    Gdzie: ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.

  • Logi systemowe procesora komunikatów
    /opt/apigee/var/log/edge-message-processor/logs/system.log

Odniesienia

Obsługa błędów w Apigee