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

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Krótki opis problemu

Aplikacja kliencka otrzymuje kod stanu HTTP 431 Request Header Fields Too Large z kodem błędu protocol.http.TooBigHeaders w odpowiedzi na wywołania interfejsu API calls.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 431 Request Header Fields Too Large

Może też 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 jest większy niż dozwolony limit w Apigee Edge zgodnie z RFC 6585, sekcja 5: 431 Request Header Fields Too Large.

Oto możliwe przyczyny tego błędu:

Przyczyna Opis Instrukcje rozwiązywania problemów, których dotyczy
Rozmiar nagłówków żądań jest większy niż 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 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 Apigee Edge jako użytkownik z odpowiednią rolą.
  2. Przejdź do organizacji, w której chcesz zbadać problem.

  3. Otwórz stronę Analyze > API Monitoring > Investigate (Analiza > Monitorowanie interfejsów API > Zbadaj).
  4. Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
  5. Wykreśl Fault Code (Kod błędu) względem Time (Czas).
  6. Wybierz komórkę z kodem błędu protocol.http.TooBigHeaders i kodem stanu 431 jak poniżej:

    ( powiększ obraz)

  7. Zobaczysz informacje o kodzie błędu protocol.http.TooBigHeaders jak poniżej:

    ( powiększ obraz)

  8. Kliknij View logs (Wyświetl logi) i rozwiń wiersz nieudanego żądania:

    ( powiększ obraz)

  9. W oknie Logs (Logi) zanotuj te informacje:

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

Narzędzie Trace

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 431.
  2. Sprawdź 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.

  3. Sprawdź, czy w określonym czasie występują błędy 431 (jeśli problem wystąpił w przeszłości) lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu 431.
  4. Jeśli znajdziesz błędy 431 z X-Apigee-fault-code pasującym do wartości protocol.http.TooBigHeaders, określ wartość X-Apigee-fault-source.

    W powyższym przykładowym wpisie z logu dostępu NGINX X-Apigee-fault-code i X-Apigee-fault-source: mają te wartości:

    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 jest większe 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, X-Apigee-fault-code ma wartość protocol.http.TooBigHeaders, a Request Length (Długość żądania) wynosi 40 KB, czyli więcej niż dozwolony limit w Apigee – 25 KB. Wyraźnie wskazuje to, ż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ń jest większy niż dozwolony limit

Diagnostyka

  1. Określ Fault Code (Kod błędu), Fault Source (Źródło błędu) i Request-Length size (Rozmiar długości żądania) dla zaobserwowanego błędu za pomocą monitorowania interfejsów API lub logów dostępu NGINX zgodnie z opisem w sekcji Typowe czynności diagnostyczne.
  2. Jeśli Fault Source (Źródło błędu) ma wartość apigee lub MP, Fault Code (Kod błędu) ma wartość protocol.http.TooBigHeaders, a Request Length (Długość żądania) jest większa niż 25 KB, oznacza to, że rozmiar żądania wysyłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge.
  3. Możesz sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, używając jednej z tych metod:

    Komunikat o błędzie

    Aby sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, użyj komunikatu o błędzie:

    Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, to sprawdź faultstring. The faultstring wskazuje, ż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 sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, użyj 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 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 to 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 powyższym przykładzie łą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 używasz innego klienta, możesz sprawdzić jego logi i spróbować znaleźć rozmiar wiersza żądania wysyłanego do Apigee Edge.

    Logi procesora komunikatów

    Aby sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, użyj logów procesora komunikatów:

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

    1. Sprawdź logi procesora komunikatów:

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

    2. Sprawdź, czy w określonym czasie występują błędy 431 (jeśli problem wystąpił w przeszłości) lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu 431. Możesz użyć tych ciągów wyszukiwania.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Znajdziesz wiersze z 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 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 zwraca 431 kod stanu z kodem błędu protocol.http.TooBigHeaders do aplikacji klienckich.

Rozwiązanie

Napraw rozmiar

Opcja 1 [zalecana]: zmień aplikację kliencką, aby nie wysyłała nagłówków żądań o łącznym rozmiarze większym niż dozwolony limit

  1. Przeanalizuj przyczynę, dla której konkretny klient wysyła nagłówek żądania o dużym rozmiarze, co powoduje, że łączny rozmiar nagłówka przekracza dozwolony limit określony w sekcji Limity.
  2. Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką, aby wysyłała nagłówki żądań o rozmiarze mniejszym niż dozwolony limit.

    W omówionym powyżej przykładzie możesz rozwiązać problem, przekazując długie wartości nagłówka jako parametr w 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 jest to pożądane i chcesz wysłać nagłówek o rozmiarze większym niż dozwolony limit, przejdź do następnej opcji.

CwC

Opcja 2 : użyj właściwości CwC, aby zwiększyć limit wiersza żądania

Apigee udostępnia właściwość CwC, która umożliwia zwiększenie limitu rozmiaru wiersza żądania. Więcej informacji znajdziesz w artykule Ustawianie limitu wiersza żądania w procesorze komunikatów

Limity

Apigee oczekuje, że aplikacja kliencka i serwer backendu nie będą wysyłać nagłówków żądań/odpowiedzi o rozmiarach większych niż dozwolony limit zgodnie z dokumentacją dotyczącą limitu rozmiaru nagłówka żądania/odpowiedzi w sekcji Limity Apigee Edge.

  1. Jeśli jesteś użytkownikiem chmury publicznej, maksymalny limit rozmiaru nagłówków żądań i odpowiedzi jest zgodny z dokumentacją dotyczącą rozmiaru nagłówka żądania/odpowiedzi w sekcji Limity Apigee Edge.
  2. Jeśli jesteś użytkownikiem chmury prywatnej , możesz zmodyfikować 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ć, postępując zgodnie z instrukcjami w sekcji Jak sprawdzić bieżący limit.

Jak sprawdzić bieżący limit?

W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPRequest.headers.limit została zaktualizowana o nową wartość w procesorach komunikatów.

  1. Na maszynie procesora komunikatów 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 powyższego polecenia:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
  3. W powyższym przykładzie zwróć uwagę, że właściwość HTTPRequest.headers.limit została ustawiona na wartość 25k w http.properties.

    Oznacza to, że limit rozmiaru nagłówka żądania skonfigurowany w Apigee dla chmury prywatnej wynosi 25 KB.

Specyfikacja

Apigee Edge oczekuje, że aplikacja kliencka nie będzie wysyłać nagłówków o dużym rozmiarze w ramach żądania. Jeśli żądanie zawiera nagłówki o łącznym rozmiarze większym niż określony limit, Apigee zgłasza błąd 431 Request Header Fields Too Large zgodnie z tymi specyfikacjami RFC:

Specyfikacja
RFC 6585, sekcja 5: 431 Request Header Fields Too Large

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ć

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 proxy interfejsu API
  • Pełne polecenie curl użyte do odtworzenia błędu 431
  • 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 organizacji
  • Nazwa środowiska
  • Pakiet proxy interfejsu API
  • Plik śledzenia nieudanych żądań do interfejsu API
  • Pełne 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.

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