414 Identyfikator URI żądania jest za długi – TooBigLine

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

Krótki opis problemu

Aplikacja kliencka otrzymuje kod stanu HTTP 414 Request-URI Too Long z kodu błędu protocol.http.TooBigLine jako odpowiedzi na wywołania interfejsu API.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 414 Request-URI Too Long

Możesz też zobaczyć następujący komunikat o błędzie:

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Pamiętaj, że pole faultstring w powyższym komunikacie o błędzie zawiera dozwolony limit. dla wiersza żądania w Apigee Edge, która ma wartość 7168 bytes (7 KB).

Możliwe przyczyny

Ten błąd występuje, jeśli rozmiar wiersza żądania wysłanego przez aplikację kliencką do Apigee Edge jako część żądania HTTP przekracza dozwolony limit w Apigee Edge.

Zanim przyjrzymy się możliwym przyczynom tego błędu, wyjaśnijmy, co wiersz żądania i jak sprawdzić ich rozmiar.

Informacje na temat wiersza żądania

Typowe żądanie HTTP składa się z 3 części:

  1. Linia żądania
  2. ( Zestaw nagłówków HTTP )
  3. [ Treść ]

Wiersz żądania składa się z 3 części, jak pokazano poniżej.

Request-Line = <Method> <Request-URI> <HTTP-Version>

Gdy aplikacja kliencka wysyła żądanie HTTP do serwera, pierwszy wiersz serwer zawiera wiersz Request-Line opisany powyżej. Po nim następuje znak nagłówki oraz treść lub ładunek żądania.

Poniższy przykładowy zrzut ekranu przedstawia typowe żądanie curl: Request (wraz z wierszem żądania) i Response (Odpowiedź).

Rozmiar wiersza żądania

  1. W omawianym wyżej przykładzie wiersz start (pierwszy wiersz) w żądaniu zawiera też (Request-Line) i to wygląda tak:
    GET /test/ HTTP/1.1
    

    Wiersz żądania ma rozmiar ~19 bytes, ponieważ zawiera 19 ASCII characters Ponieważ jest to w ramach dozwolony limit w Apigee Edge, żądanie zostanie przetworzone bez błędów a Ty otrzymasz odpowiedź.

  2. Podobnie, jeśli spojrzysz na faultstring w Komunikat o błędzie pokazany powyżej, zawiera "request line size exceeding 7,168". Wskazuje to, że wiersz żądania w żądaniu HTTP wysłanym przez klienta przekroczył 7168 bajtów.

Oto możliwe przyczyny tego błędu:

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Rozmiar ładunku żądania jest większy niż dozwolony limit Rozmiar identyfikatora URI żądania wysłanego przez aplikację kliencką w ramach żądania HTTP żądań 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.TooBigLine i kodu stanu 414, jak pokazano poniżej:

    ( wyświetl większy obraz)

  7. Zobaczysz informacje o kodzie błędu protocol.http.TooBigline 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: 414
    • Źródło błędu: apigee
    • Kod błędu: protocol.http.TooBigLine.
    • Długość żądania(bajty): 7244 (> 7KB)
  10. Jeśli Źródło błędu ma wartość apigee lub MP, Kod błędu ma wartość protocol.http.TooBigLine i Wartość Request-Length ma wartość większą niż 7 KB, co oznacza, że żądanie HTTP z klienta ma identyfikator URI żądania większy 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 414.
  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 (414) 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 414
  4. Jeśli znajdziesz błędy 414 z kodem błędu X-Apigee-fault-code pasujące do wartości protocol.http.TooBigLine, 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.TooBigLine
    X-Apigee-fault-source policy

    Zwróć uwagę na długość żądania: 7244 (7,244 KB > dozwolony limit)

Przyczyna: rozmiar ładunku żą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 monitorowania interfejsów API, narzędzia Trace Tool lub logów dostępu NGINX, jak wyjaśniono w artykule Najczęstsze czynności diagnostyczne.
  2. Jeśli Źródło błędu ma wartość apigee lub MP, 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 wiersza żądania przekroczył dozwolony limit 7 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 rozmiar wiersza żądania przekroczył dozwolony limit 7 KB.

    Przykładowy komunikat o błędzie:

    "faultstring":"request line size exceeding 7,168"
    

    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 identyfikatora URI przekazywanego w żądaniu.
    2. Jeśli rozmiar identyfikatora URI jest większy niż dozwolony limit w Apigee Edge, to jest przyczyna problemu.

      Przykładowe żądanie:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      W tym przypadku wartość parametru zapytania qparam jest większy niż 7 KB, czyli zawiera ponad 7 tys. znaków ASCII.

      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 wiersza żądania 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 (414) podczas określonego 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 414. Możesz użyć następujących ciągów wyszukiwania.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Znajdziesz tam wiersze z domeny system.log podobne do tych:
      2021-07-12 08:53:31,461  NIOThread@0 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() : Request:null, uri:null,
      message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{
      code = protocol.http.TooBigLine, message = request line size exceeding 7,168,
      associated contexts = []}, context:Context@366f4217
      input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443
      Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849
      age=2254670ms lastIO=0ms isOpen=true)
      

      Tekst message = request line size exceeding 7,168 w ten komunikat o błędzie wskazuje, że rozmiar identyfikatora URI żądania przekracza 7 KB. Dlatego Apigee Edge zgłasza wyjątek com.apigee.errors.http.user.RequestURITooLong i zwroty Kod stanu 414 z kodem błędu protocol.http.TooBigline dla aplikacji klienckich.

Rozdzielczość

Popraw rozmiar

Opcja nr 1 [zalecana]: popraw aplikację kliencką, aby nie wysyłać identyfikatora URI żądania większego niż dozwolony limit

  1. Przeanalizuj powód, dla którego dany klient wysłał identyfikator URI żądania o rozmiarze większym niż dozwolony limit określony w sekcji Limity.
  2. Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką tak, aby wysyłała identyfikator URI żądania rozmiar mniejszy niż dozwolony limit.

    W omówionym powyżej przykładzie możesz rozwiązać problem, przekazując długie zapytanie jako część treści/ładunku żądania, zamiast przekazywać go jako część żądania, jak pokazano poniżej:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Jeśli jest to możliwe i chcesz wysyłać URI więcej niż dozwolony limit, otwórz kolejne opcje.

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ć wierszy żądań/odpowiedzi których rozmiary są większe niż dozwolony limit określony dla Limitu wierszy żądania/odpowiedzi. w sekcji Apigee Edge Limits (Limity brzegowe Apigee).

  1. Jeśli jesteś użytkownikiem Public Cloud Cloud, maksymalny limit żądań i Rozmiar wiersza odpowiedzi jest zgodny z dokumentacją dla rozmiaru wiersza żądania/odpowiedzi w Limity Apigee.
  2. Jeśli jesteś użytkownikiem Private Cloud , możliwe, że domyślne maksimum zostało zmienione limitu rozmiaru żądania i wiersza odpowiedzi (mimo że nie jest to zalecane działanie). Maksymalny rozmiar wiersza żądania możesz określić, postępując zgodnie z instrukcjami w Jak sprawdzić aktualny limit

Jak sprawdzić obecny limit?

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

  1. Na komputerze z procesorem wiadomości wyszukaj właściwość HTTPRequest.line.limit w: /opt/apigee/edge-message-processor/conf i sprawdź w Zobacz, jaka wartość została ustawiona, jak pokazano poniżej:
    grep -ri "HTTPRequest.line.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.line.limit=7k
    
  3. W przykładowych danych wyjściowych powyżej zwróć uwagę, że właściwość HTTPRequest.line.limit została ustawiona na wartość 7k w http.properties.

    Wskazuje, że limit rozmiaru wiersza żądania skonfigurowany w Apigee dla prywatnych Chmura ma 7 KB.

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 414
  • 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 414
  • 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