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

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.Response405WithoutAllowHeader 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ć następujący 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 ze stanem 405 Method Not Allowed bez nagłówka Allow.

Zgodnie ze specyfikacją RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Metoda niedozwolona), należy MUSI wygenerować i wysłać pole nagłówka Allow w odpowiedzi 405 zawierającej lista obecnie obsługiwanych metod zasobu docelowego. Jeśli nie, Apigee zwróci odpowiedź 502 Bad Gateway i kod błędu protocol.http.Response405WithoutAllowHeader.

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Odpowiedź 405 bez zezwalania 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 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 Edge jako użytkownik z uprawnieniami odpowiednią rolę.
  2. Przełącz się na organizację, w której chcesz zbadać problem.

    lista organizacji
  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 zawiera kod błędu protocol.http.Response405WithoutAllowHeader jak pokazano poniżej:

  7. Informacje o kodzie błędu protocol.http.Response405WithoutAllowHeader jak pokazano poniżej:

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

  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łęduprotocol.http.Response405WithoutAllowHeader, oznacza to, że backend serwer odpowiedział kodem stanu 405 Method Not Allowed bez Nagłówek Allow.

Narzędzie śledzenia

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

  1. Włącz śledzenie sesji oraz
    • Poczekaj, aż wystąpi błąd 502 Bad Gateway lub
    • Jeśli możesz odtworzyć problem, wywołaj interfejs API, aby odtworzyć problem. 502 Bad Gateway błąd
  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. Błąd występuje zwykle w trakcie procesu po wysłaniu żądania do serwera docelowego faza, jak poniżej:

  6. Zwróć uwagę na wartość błędu z śladu.

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

  7. Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
  8. Przewiń stronę w dół do sekcji Error / Response Headers (Nagłówki błędów/odpowiedzi) na stronie Szczegóły etapu. i określić 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 jako protocol.http.Response405WithoutAllowHeader i targetodpowiednio, wskazujący, ż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 do określenia najważniejsze 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: wartości ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.

  3. Wyszukaj błędy (502) z kodem błędu protocol.http.Response405WithoutAllowHeader w konkretnym okresie (jeśli w przeszłości) lub jeśli jakieś żądania nadal kończą się niepowodzeniem 502
  4. Jeśli znajdziesz błędy 502w X-Apigee-fault-code paskującym wartość protocol.http.Response405WithoutAllowHeader, a następnie wyznacz X-Apigee-fault-source..

    Przykładowy błąd 502 z dziennika dostępu NGINX:

    Powyższy przykładowy wpis z logu dostępu NGINX zawiera następujące wartości dla X-Apigee- kod błędu 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 zezwalania na nagłówek z serwera backendu

Diagnostyka

  1. Określ kod błędu i źródło błędu dla 502 Bad Gateway przy użyciu API Monitoring, narzędzia Trace lub logów dostępu NGINX, jak wyjaśniono w Najczęstsze czynności diagnostyczne.
  2. Jeśli kod błędu to protocol.http.Response405WithoutAllowHeader i Źródło błędu ma wartość target, oznacza to, że serwer backendu ma odpowiedział(a) kodem stanu 405 bez nagłówka Allow. Dlatego Apigee wysyła odpowiedź z kodem błędu 502 Bad Gateway protocol.http.Response405WithoutAllowHeader

Rozdzielczość

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

Serwer backendu

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

  1. Zadbaj o to, aby serwer backendu zawsze przestrzegał specyfikacji RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Metoda niedozwolona) i wysyła ze stanem 405 przez dodanie listy metod, które są dozwolone w nagłówku Allow jak poniżej:

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

Obsługa awarii

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

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

  1. Utwórz zasadę, na przykład Zasady AssignMessage lub RaiseFault policy i ustaw kod stanu na 405 z nagłówkiem Allow i niestandardowym .

    Przykładowa zasada AssignMessage wysyłająca kod błędu 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 obiekt FaultRule w TargetEndpoint, który wywołuje zasadę. po wyświetleniu błędu 502 z kodem błędu protocol.http.Response405WithoutAllowHeader

    Przykładowa konfiguracja docelowego punktu końcowego z 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. Wywołuj interfejs API i sprawdź, czy otrzymujesz kod stanu 405 za pomocą Allow.

Skonfiguruj usługę

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

  1. Jeśli jesteś użytkownikiem Private Cloud, możesz zaktualizować usługę Od HTTP.ignore.allow_header.for.405 do true, aby uniemożliwić Apigee Edge powoduje zgłaszanie błędu 502, nawet jeśli serwer backendu odpowiada 405 kodu stanu bez nagłówka Allow. , Konfiguruję nagłówek ignorowania zezwalania dla właściwości 405 w usługach przetwarzania wiadomości.
  2. Jeśli korzystasz z usługi Public Cloud , skontaktuj się z zespołem pomocy Apigee Edge

Specyfikacja

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

Specyfikacja
RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Niedozwolona metoda)
RFC 7231, sekcja 7.4.1: Zezwalaj

Najważniejsze kwestie

Zalecanym rozwiązaniem jest naprawienie błędu serwera backendu, aby wysyłał kod stanu 405 z nagłówkiem Allow i zgodne ze specyfikacją RFC 7231, sekcja 6.5.5: 405 Method Not Allowed (Niedozwolona metoda).

Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, wejdź na Musi zbierać informacje diagnostyczne.

Musi zbierać informacje diagnostyczne

Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zwróć uwagę na 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 502 Bad Gateway z użyciem kod błędu protocol.http.Response405WithoutAllowHeader
  • 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 serwerów 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: wartości 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
    

Pliki referencyjne

Obsługa błędów w Apigee