431 Pola nagłówka żądania są za duże – TooBigHeaders

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 431 Request Header Fields Too Large z kodem błędu protocol.http.TooBigHeaders .

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 431 Request Header Fields Too Large

Oprócz tego może pojawić się ten komunikat o błędzie:

{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Możliwe przyczyny

Ten błąd występuje, jeśli łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką do Apigee Edge w ramach żądania HTTP przekracza dozwolony limit w Apigee Edge zgodnie z RFC 6585, sekcja 5: 431 Pola nagłówka żądania są zbyt duże.

Oto możliwe przyczyny tego błędu:

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Rozmiar nagłówków żądań przekracza dozwolony limit Łączny rozmiar wszystkich nagłówków wysyłanych przez aplikację kliencką w ramach żądania HTTP do Apigee Edge jest większy niż dozwolony limit w Apigee Edge. 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 Apigee Edge jako użytkownik z odpowiednią rolą.
  2. Przełącz się na organizację, w której chcesz zbadać problem.

  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.TooBigHeaders i kodem stanu 431, jak pokazano poniżej:

    ( wyświetl większy obraz)

  7. Informacje o kodzie błędu protocol.http.TooBigHeaders wyświetlą się poniżej:

    ( wyświetl większy obraz)

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

    ( wyświetl większy obraz)

  9. W oknie Logi zwróć uwagę na te informacje:

    • Kod stanu: 431
    • Źródło błędu: apigee
    • Kod błędu: protocol.http.TooBigHeaders.
    • Długość żądania(bajty): 32150 (> 25 KB)
  10. Jeśli źródło błędu ma wartość apigee lub MP, kod błędu ma wartość protocol.http.TooBigHeaders, a długość żądania jest większa niż 25 KB, co oznacza, że łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką w ramach żądania HTTP przekracza dozwolony limit w Apigee.

Narzędzie do śledzenia

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 431.
  2. Sprawdź logi dostępu do NGINX:

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

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

  3. Sprawdź, czy występują jakieś błędy 431 w danym okresie (jeśli problem występował w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z 431.
  4. Jeśli znajdziesz błędy 431 z kodem X-Apigee-fault-code pasującym do wartości X-Apigee-fault-code , sprawdź wartość źródła błędów X-Apigee-fault-code .

    Powyższy przykładowy wpis z logu dostępu NGINX ma następujące wartości kodu X-Apigee-fault-code i X-Apigee-fault-code :

    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    Zwróć uwagę na długość żądania: 40159 (40 KB to więcej niż 25 KB, czyli dozwolony limit dla nagłówków żądań w Apigee Edge)

    W powyższym przykładowym wpisie logu X-Apigee-fault-source ma wartość apigee lub MP, kod X-Apigee-fault-code ma wartość protocol.http.TooBigHeaders, a długość żądania to 40 KB, czyli więcej niż dozwolony limit w Apigee – 25 KB. Wskazuje to wyraźnie, że łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką w ramach żądania HTTP przekroczył dozwolony limit 25 KB w Apigee Edge.

Przyczyna: rozmiar nagłówków żądań przekracza dozwolony limit

Diagnostyka

  1. Określ kod błędu, źródło błędu i rozmiar żądania dla błędu zaobserwowanego w logach monitorowania interfejsów API lub w logach dostępu NGINX zgodnie z opisem w sekcji Typowe czynności diagnostyczne.
  2. Jeśli źródło błędu ma wartość apigee lub MP, kod błędu ma wartość protocol.http.TooBigHeaders, a długość żądania jest większa niż 25 KB, oznacza to, że rozmiar żądania wysłanego przez aplikację kliencką do Apigee przekracza dozwolony limit w Apigee Edge.
  3. Aby sprawdzić, czy rozmiar nagłówków żądania przekracza dozwolony limit 25 KB, użyj jednej z tych metod:

    Komunikat o błędzie

    Aby przeprowadzić weryfikację przy użyciu komunikatu o błędzie:

    Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, zapoznaj się z dokumentem faultstring. faultstring oznacza, że łączny rozmiar nagłówków żądań przekracza dozwolony limit 25 KB.

    Przykładowy komunikat o błędzie:

    "faultstring":"request headers size exceeding 25,600"
    

    Rzeczywista prośba

    Aby sprawdzić poprawność za pomocą rzeczywistego żądania:

    Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj te czynności:

    1. Sprawdź rozmiar nagłówków przekazanych w żądaniu.
    2. Jeśli okaże się, że łączny rozmiar nagłówków przekracza dozwolony limit w Apigee Edge, to jest przyczyną problemu.

      Przykładowe żądanie:

      curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
      

      W powyższych przypadkach łączny rozmiar nagłówków header0, header1, header2 i header3 jest większy niż 25 KB, czyli zawiera więcej niż 25 tys. znaków ASCII (bajtów).

      Jeśli korzystasz z innego klienta, możesz przejrzeć dzienniki klienta i spróbować ustalić rozmiar wiersza żądania wysyłanego do Apigee Edge.

    Logi procesora wiadomości

    Aby sprawdzić poprawność danych za pomocą dzienników procesora wiadomości:

    Jeśli korzystasz z chmury prywatnej, możesz użyć logów procesora wiadomości, aby sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit w Apigee Edge.

    1. Sprawdź dzienniki procesora wiadomości:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Sprawdź, czy w danym okresie wystąpiły jakieś błędy 431 (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które wciąż kończą się niepowodzeniem z użyciem metody 431. Możesz użyć następujących ciągów wyszukiwania.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Zobaczysz wiersze ze źródła system.log podobne do tych:
      2021-07-27 08:30:28,419  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() :
      Request:GET, uri:/test/, message Id:null,
      exception:com.apigee.errors.http.user.RequestHeadersTooLarge{
      code = protocol.http.TooBigHeaders, message = request headers size
      exceeding 25,600, associated contexts = []}, context:Context@9c5903
      input=ClientInputChannel(SSLClientChannel[Accepted:
      Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130
      useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms  lastIO=0ms
      isOpen=true)
      

      Tekst message = request headers size exceeding 25,600 w powyższym komunikacie o błędzie oznacza, że łączny rozmiar nagłówków żądań przekracza 25 KB. Dlatego Apigee Edge zgłasza wyjątek com.apigee.errors.http.user.RequestHeadersTooLarge i zwraca aplikacjom klienckim kod błędu 431 z kodem błędu protocol.http.TooBigHeaders .

Rozdzielczość

Stały rozmiar

Opcja nr 1 [zalecana]: napraw aplikację kliencką, aby nie wysyłała nagłówków żądań o łącznym rozmiarze przekraczającym dozwolony limit

  1. Przeanalizuj przyczynę wysłania przez konkretnego klienta nagłówka żądania o dużym rozmiarze, który sprawia, że łączny rozmiar nagłówka przekracza limit określony w limitach.
  2. Jeśli nie chcesz, zmodyfikuj aplikację kliencką tak, aby wysyłała nagłówki żądań o rozmiarze mniejszym niż dozwolony limit.

    W przykładzie powyżej możesz rozwiązać problem, przekazując parametr wartości długiego nagłówka jako część treści/ładunku żądania:

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. Jeśli chcesz wysłać nagłówek większy niż dozwolony limit, przejdź do następnej opcji.

CwC

Opcja 2. Użyj właściwości CwC, aby zwiększyć limit liczby żądań

Apigee udostępnia właściwość CwC, która pozwala zwiększyć limit rozmiaru wiersza żądania. Więcej informacji znajdziesz w artykule o ustawianiu limitu wierszy żądań w procesorze wiadomości.

Ograniczenia

Apigee oczekuje, że aplikacja kliencka i serwer backendu nie wysyłają nagłówków żądań/odpowiedzi, których rozmiar przekracza dozwolony limit określony dla limitu rozmiaru nagłówków żądań/odpowiedzi w limitach Edge Apigee.

  1. Jeśli jesteś użytkownikiem chmury publicznej, maksymalny rozmiar nagłówków żądań i odpowiedzi jest zgodny z rozmiarem nagłówka żądania/odpowiedzi w sekcji Limity Edge Apigee.
  2. Jeśli jesteś użytkownikiem Private Cloud , możesz zmienić domyślny maksymalny limit rozmiaru nagłówków żądań i odpowiedzi (chociaż nie jest to zalecane). Maksymalny limit rozmiaru nagłówka żądania możesz określić, wykonując instrukcje z artykułu Jak sprawdzić bieżący limit.

Jak sprawdzić aktualny limit?

Ta sekcja wyjaśnia, jak sprawdzić, czy właściwość HTTPRequest.headers.limit została zaktualizowana o nową wartość w procesorach wiadomości.

  1. Na komputerze procesora wiadomości wyszukaj właściwość HTTPRequest.headers.limit w katalogu /opt/apigee/edge-message-processor/conf i sprawdź, jaka wartość została ustawiona, jak pokazano poniżej:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Przykładowy wynik tego polecenia:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
  3. W powyższych przykładach wyjściowych warto zauważyć, że właściwość HTTPRequest.headers.limit została ustawiona z wartością 25k w języku http.properties.

    Oznacza to, że limit rozmiaru nagłówka żądania skonfigurowanego w Apigee dla Private Cloud to 25 KB.

Specyfikacja

Apigee Edge wymaga, aby aplikacja kliencka nie wysyłała w ramach żądania nagłówków o dużym rozmiarze. Jeśli żądanie zawiera nagłówki, których łączny rozmiar przekracza określony limit, Apigee zgłasza 431 Request Header Fields Too Large zgodnie z tymi specyfikacjami RFC:

Specyfikacja
RFC 6585, sekcja 5: 431 Pola nagłówka żądania są za duże

Jeśli nadal będziesz potrzebować pomocy zespołu pomocy Apigee, przejdź do artykułu Wymagane jest zbieranie informacji diagnostycznych.

Musisz zebrać informacje diagnostyczne

Zbierz te informacje diagnostyczne, a następnie 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 błędu 431
  • 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 organizacji
  • Nazwa środowiska
  • Pakiet proxy API
  • Plik śledzenia nieudanych żądań do interfejsu API
  • Wykonaj polecenie curl użyte do odtworzenia błędu 431
  • Logi dostępu NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

  • Dzienniki systemowe procesora wiadomości /opt/apigee/var/log/edge-message-processor/logs/system.log