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

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

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 502 Bad Gateway

Oprócz tego może 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: Niedozwolona metoda 405, serwer pierwotny MUSI wygenerować i wysłać pole nagłówka Allow w odpowiedzi 405 zawierającej listę obecnie obsługiwanych metod zasobu docelowego. Jeśli nie, Apigee w odpowiedzi wysyła 502 Bad Gateway i kod błędu protocol.http.Response405WithoutAllowHeader.

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Odpowiedź 405 bez zezwolenia na nagłówek 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 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:

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

    lista organizacji
  3. Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
  4. Wybierz przedział czasu, w którym zaobserwowano błędy.
  5. Porównaj kod błędu z czasem.

  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. Aby wyświetlić więcej informacji, kliknij Wyświetl logi i rozwiń jedno z nieudanych żądań.

  9. W oknie Logi zwróć uwagę na 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ł z kodem stanu 405 Method Not Allowed bez nagłówka Allow.

Narzędzie do śledzenia

Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:

  1. Włącz sesję śledzenia i:
    • Poczekaj na wystąpienie błędu 502 Bad Gateway lub
    • Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby go odtworzyć – błąd 502 Bad Gateway
  2. Sprawdź, czy opcja Show all FlowInfos (Pokaż wszystkie informacje) jest włączona:

  3. Wybierz 1 z nieudanych żądań i sprawdź log czasu.
  4. Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
  5. Błąd zwykle pojawia się w przepływie po fazie Żądanie wysłane do serwera docelowego, jak pokazano poniżej:

  6. Zapisz wartość błędu ze śledzenia.

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

  7. Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
  8. Przewiń w dół do sekcji Error / Response Headers (Nagłówki błędów / odpowiedzi odpowiedzi) w panelu Szczegóły fazy i ustal 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 protocol.http.Response405WithoutAllowHeader i target, wskazując, ż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 przy użyciu logów dostępu NGINX:

  1. Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX, aby określić kluczowe informacje o błędach HTTP 502.
  2. Sprawdź logi dostępu do 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 danym okresie wystąpiły jakieś błędy 502 z kodem błędu protocol.http.Response405WithoutAllowHeader (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z 502.
  4. Jeśli znajdziesz błędy 502 z kodem X-Apigee-fault-code pasującym do wartości protocol.http.Response405WithoutAllowHeader, sprawdź wartość źródła błędów X-Apigee-fault-code .

    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 kodów 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 zezwolenia na nagłówek z serwera backendu

Diagnostyka

  1. Określ kod błędu i źródło błędu dla instancji 502 Bad Gateway za pomocą logów dostępu API Monitoring, narzędzia do śledzenia lub NGINX zgodnie z opisem w typowych krokach diagnostycznych.
  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ł z kodem stanu 405 bez nagłówka Allow. Dlatego Apigee w odpowiedzi wysyła 502 Bad Gateway z kodem błędu protocol.http.Response405WithoutAllowHeader.

Rozdzielczość

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

Serwer backendu

Opcja 1. Napraw serwer backendu, aby wysłać kod stanu 405 z nagłówkiem Zezwalaj:

  1. Sprawdź, czy serwer backendu zawsze przestrzega specyfikacji RFC 7231, sekcja 6.5.5: Niedozwolona metoda 405 i wysyła z kodem stanu 405, dołączając listę metod, które są dozwolone w nagłówku Allow, jak pokazano poniżej:

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

Obsługa błędów

Opcja nr 2. Użyj opcji Obsługa błędów, aby wysłać kod stanu 405 z nagłówkiem Zezwalaj z serwera proxy interfejsu API:

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

  1. Utwórz zasadę, taką jak zasada AssignMessage lub CauseFault, 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 w TargetEndpoint element FaultRule, który będzie wywoływać zasadę po otrzymaniu błędu 502 z kodem błędu protocol.http.Response405WithoutAllowHeader.

    Przykładowa konfiguracja TargetEndpoint z wyświetloną regułą 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 serwera proxy interfejsu API i wdróż tę wersję.
  4. Wykonaj wywołania interfejsu API i sprawdź, czy otrzymujesz kod stanu 405 z nagłówkiem Allow.

Skonfiguruj usługę

Opcja 3. Skonfiguruj właściwość w procesorze wiadomości, aby zapobiec zwracaniu przez Apigee Edge błędu 502

  1. Jeśli jesteś użytkownikiem Private Cloud, możesz zaktualizować właściwość HTTP.ignore.allow_header.for.405 do true, aby zapobiec zgłaszaniu przez Apigee Edge błędu 502, nawet jeśli serwer backendu odpowie z kodem stanu 405 bez nagłówka Allow, zgodnie z instrukcją: Jak skonfigurować nagłówek ignorowania zezwolenia na kod 405 w procesorach wiadomości.
  2. Jeśli jesteś użytkownikiem usługi Public Cloud , skontaktuj się z zespołem pomocy Apigee Edge

Specyfikacja

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

Specyfikacja
RFC 7231, sekcja 6.5.5: Niedozwolona metoda 405
RFC 7231, sekcja 7.4.1: Zezwalaj

Najważniejsze kwestie

Zalecanym rozwiązaniem jest naprawienie serwera backendu tak, aby wysyłał kod stanu 405 z nagłówkiem Allow, oraz przestrzeganie specyfikacji RFC 7231, sekcja 6.5.5: Niedozwolona metoda 405.

Jeśli nadal będziesz potrzebować pomocy zespołu pomocy Apigee, przejdź do artykułu Musisz zebrać informacje diagnostyczne.

Musisz zebrać informacje diagnostyczne

Jeśli problem nie ustąpi mimo wykonania powyższych instrukcji, zbierz poniższe 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 serwera proxy interfejsu API
  • Wykonaj polecenie curl użyte do odtworzenia elementu 502 Bad Gateway z kodem błędu protocol.http.Response405WithoutAllowHeader
  • 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 interfejsu API
  • Plik śledzenia żądań 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 wiadomości
    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Odniesienia

Obsługa błędów w Apigee