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

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Krótki opis problemu

Aplikacja kliencka jako odpowiedź dla interfejsu API otrzymuje kod stanu HTTP 431 Request Header Fields Too Large z kodem błędu protocol.http.TooBigHeaders połączeń.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 431 Request Header Fields Too Large

Możesz też zobaczyć następujący 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ń wysłanych przez aplikację kliencką do Apigee Edge jako część żądania HTTP jest większa niż dozwolony limit w Apigee Edge zgodnie z RFC 6585, sekcja 5: 431 Request Header Fields Too Large (Zbyt duże pola nagłówka żądania).

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 wysłanych przez aplikację kliencką w ramach żądania HTTP do Apigee Edge przekracza dozwolony limit w Apigee Edge. 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 zawiera kod błędu protocol.http.TooBigHeaders i kodu stanu 431, jak pokazano poniżej:

    ( wyświetl większy obraz)

  7. Zobaczysz informacje o kodzie błędu protocol.http.TooBigHeaders jak 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: 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 i Długość żądania przekracza 25 KB, co oznacza, że łączny rozmiar wszystkie nagłówki żądań wysyłane przez aplikację kliencką w ramach żądania HTTP większe niż dozwolony limit w Apigee.

Narzędzie ś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żywać logów dostępu NGINX do: określenie najważniejszych informacji o błędach HTTP 431.
  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 (431) w danym okresie (jeśli problem wystąpił w przeszłości) lub jeśli masz jakieś żądania, które nadal kończą się niepowodzeniem 431
  4. Jeśli znajdziesz błędy 431 z kodem błędu X-Apigee-fault-code pasujące do wartości protocol.http.TooBigHeaders, a następnie określ wartość X-Apigee-fault-source..

    Powyższy przykładowy wpis z logu dostępu NGINX zawiera następujące wartości dla: 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, dozwolony limit nagłówków żądań w Apigee Edge)

    W powyższym przykładowym wpisie logu parametr X-Apigee-fault-source zawiera wartość apigee lub MP, X-Apigee-fault-code ma wartość protocol.http.TooBigHeaders i długość żądania to 40 KB, co stanowi jest większy niż dozwolony limit w Apigee – 25 KB. Wyraźnie wskazuje to, że łączny rozmiar wszystkich nagłówków żądań wysłanych przez aplikację kliencką w ramach protokołu HTTP żądanie przekroczyło dozwolony limit 25 KB w Apigee Edge.

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

Diagnostyka

  1. Określ kod błędu, źródło błędu i rozmiar żądania dla błędu zaobserwowany błąd przy użyciu logów monitorowania API lub logów dostępu NGINX, jak wyjaśniono w Najczęstsze czynności diagnostyczne.
  2. Jeśli Źródło błędu ma wartość apigee lub MP, Kod błędu ma wartość protocol.http.TooBigHeaders, i Długość żądania przekracza 25 KB, to wskazuje, że rozmiar żądania wysłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge.
  3. Możesz sprawdzić, czy rozmiar nagłówków żądania przekroczył dozwolony limit 25 KB, używając jednej z następujące metody:

    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, przeczytaj faultstring. Znak faultstring oznacza, że łączny rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB.

    Przykładowy komunikat o błędzie:

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

    Rzeczywiste żądanie

    Aby przeprowadzić weryfikację na podstawie rzeczywistego żądania:

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

    1. Sprawdź rozmiar nagłówków przekazywanych w żądaniu.
    2. Jeśli okaże się, że łączny rozmiar nagłówków jest większy niż dozwolony limit w Apigee Edge, to jest przyczyna 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 tym przypadku łączny rozmiar nagłówków header0, header1, header2 a header3 ma więcej niż 25 KB, co oznacza, że zawiera ponad 25 tys. znaków ASCII (bajtów).

      Jeśli używasz innego klienta, możesz przejrzeć jego dzienniki i spróbuj sprawdzić rozmiar wiersza żądania wysyłanego do Apigee Edge.

    Logi procesora wiadomości

    Aby przeprowadzić weryfikację za pomocą logów procesora wiadomości:

    Jeśli jesteś użytkownikiem chmury prywatnej, możesz używać logów procesora wiadomości do: sprawdzić, czy rozmiar nagłówków żądań nie przekroczył dozwolony limit w Apigee Edge.

    1. Sprawdź dzienniki procesora wiadomości:

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

    2. Wyszukaj błędy 431 w konkretnym okresie czasu trwania (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, nadal występują błędy z użyciem funkcji 431. Możesz użyć następujących ciągów wyszukiwania.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Znajdziesz tam wiersze z domeny 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żej komunikatu o błędzie wskazuje, że łączny rozmiar nagłówków żądań jest większy niż 25 KB. Dlatego Apigee Edge zgłasza wyjątek com.apigee.errors.http.user.RequestHeadersTooLarge i zwroty Kod stanu 431 z kodem błędu protocol.http.TooBigHeaders dla aplikacji klienckich.

Rozdzielczość

Popraw rozmiar

Opcja nr 1 [zalecana]: popraw aplikację kliencką, aby nie wysyłała nagłówków żądań z łączny rozmiar jest większy niż dozwolony limit

  1. Przeanalizuj przyczynę, dla której dany klient wysłał nagłówek żądania z dużym rozmiar, który powoduje, że łączny rozmiar nagłówka jest większy niż dozwolony limit określony w Limity.
  2. Jeśli nie jest to pożądane, 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 długi nagłówek wartości w treści lub ł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 jest to pożądane i chcesz wysłać nagłówek z większym limitem, przejdź do następną opcję.

CwC

Opcja 2. Zwiększ limit linii żądania za pomocą usługi CCC

Apigee zapewnia Właściwość CwC, która pozwala zwiększyć limit rozmiaru wiersza żądania. Więcej informacji: Ustaw limit wierszy żądania na procesorze wiadomości

Limity

Apigee oczekuje, że aplikacja kliencka i serwer backendu nie będą wysyłać Nagłówki żądań/odpowiedzi, których rozmiary są większe niż dozwolony limit zgodnie z dokumentacją dla limitu rozmiaru nagłówka żądania/odpowiedzi w Limity Apigee Edge.

  1. Jeśli jesteś użytkownikiem Public Cloud, maksymalny limit dla Rozmiar nagłówków żądania i odpowiedzi jest zgodny z rozmiarem rozmiaru nagłówka żądania/odpowiedzi w artykule Limity Apigee.
  2. Jeśli jesteś użytkownikiem Private Cloud , możliwe, że domyślne maksimum zostało zmienione limit rozmiaru nagłówków żądań i odpowiedzi (mimo że nie jest to zalecane działanie). Maksymalny rozmiar nagłówka żądania możesz określić, wykonując instrukcje w tym artykule: Jak sprawdzić aktualny limit

Jak sprawdzić obecny limit?

Z tej sekcji dowiesz się, jak sprawdzić, czy usługa HTTPRequest.headers.limit została zaktualizowana o nową wartość w procesorach wiadomości.

  1. Na komputerze z procesorem wiadomości wyszukaj właściwość HTTPRequest.headers.limit w: /opt/apigee/edge-message-processor/conf i sprawdź w Zobacz, jaka wartość została ustawiona, jak pokazano poniżej:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Przykładowy wynik powyższego polecenia jest taki:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
  3. W przykładowych danych wyjściowych powyżej zwróć uwagę, że właściwość HTTPRequest.headers.limit została ustawiona na wartość 25k w http.properties.

    Wskazuje on, że limit rozmiaru nagłówka żądania skonfigurowany w Apigee dla prywatnego Google Cloud ma 25 KB.

Specyfikacja

Apigee Edge oczekuje, że aplikacja kliencka nie będzie wysyłać nagłówków o dużym rozmiarze w ramach użytkownika. Jeśli żądanie zawiera nagłówki, których łączny rozmiar przekracza określony limit, Apigee wysyła żądanie 431 Request Header Fields Too Large zgodnie z tym standardem RFC specyfikacje:

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

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 431
  • 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 organizacji
  • Nazwa środowiska
  • Pakiet serwera proxy interfejsu 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 przez wartości rzeczywiste.

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