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

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 414 Request-URI Too Long z kodem błędu protocol.http.TooBigLine .

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 414 Request-URI Too Long

Oprócz tego może pojawić się ten 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 limit dozwolony dla wiersza żądania w Apigee Edge, który wynosi 7168 bytes (7 KB).

Możliwe przyczyny

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

Zanim zajmiemy się możliwymi przyczynami tego błędu, dowiedz się, co oznacza wiersz żądania i jak sprawdzić jego rozmiar.

Informacje o wierszu żądania

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

  1. Request-Line
  2. ( Zestaw nagłówków HTTP )
  3. [ Treść ]

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

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

Gdy aplikacja kliencka wysyła do serwera żądanie HTTP, pierwszy wiersz trafiający do serwera zawiera opisany powyżej wiersz żądania. Po tym nagłówku dodaj nagłówki i treść żądania.

Poniższy przykładowy zrzut ekranu przedstawia typowe żądanie curl, część Request (wraz z wierszem żądania) oraz część Response (Odpowiedź).

Rozmiar wiersza żądania

  1. W przykładzie powyżej wiersz start (pierwszy wiersz) żądania, nazywany też wierszem żądań, wygląda tak:
    GET /test/ HTTP/1.1
    

    Rozmiar wiersza żądania wynosi ~19 bytes, ponieważ zawiera 19 ASCII characters. Ponieważ ta liczba mieści się w dozwolonym limicie w Apigee Edge, żądanie jest przetwarzane bez błędów i otrzymujesz odpowiedź z powodzeniem.

  2. Podobnie jeśli spojrzysz na element faultstring w komunikacie o błędzie widocznym powyżej, zawiera on "request line size exceeding 7,168". Oznacza 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 przekracza dozwolony limit Rozmiar identyfikatora URI żądania wysyłanego 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.TooBigLine i kodem stanu 414, jak pokazano poniżej:

    ( wyświetl większy obraz)

  7. Informacje o kodzie błędu protocol.http.TooBigline 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: 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, a długość żądania jest większa niż 7 KB, co oznacza, że żądanie HTTP od klienta ma identyfikator URI żądania większy niż limit dozwolony 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 414.
  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 414 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 414.
  4. Jeśli znajdziesz błędy 414 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.TooBigLine
    X-Apigee-fault-source policy

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

Przyczyna: rozmiar ładunku żądania jest większy niż dozwolony limit

Diagnostyka

  1. Określ kod błędu, źródło błędu i rozmiar żądania dla błędu zaobserwowanego za pomocą logów interfejsu API Monitoring, narzędzia do śledzenia lub dostępu NGINX zgodnie z opisem w częstych krokach diagnostyki.
  2. Jeśli źródło błędu ma wartość apigee lub MP, oznacza to, że rozmiar żądania wysłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge.
  3. Aby sprawdzić, czy rozmiar wiersza żądania przekracza dozwolony limit 7 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 wskazuje, że rozmiar wiersza żądania przekracza dozwolony limit 7 KB.

    Przykładowy komunikat o błędzie:

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

    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 identyfikatora URI przekazanego w żądaniu.
    2. Jeśli zauważysz, że rozmiar identyfikatora URI przekracza dozwolony limit w Apigee Edge, to jest przyczyną problemu.

      Przykładowe żądanie:

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

      W powyższym przypadku wartość parametru zapytania qparam przekracza 7 KB, czyli zawiera więcej niż 7 K znaków ASCII.

      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 Private Cloud, możesz użyć logów procesora wiadomości, aby sprawdzić, czy rozmiar wiersza żądania przekracza 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 414 (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z użyciem metody 414. Możesz użyć następujących ciągów wyszukiwania.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Zobaczysz wiersze ze źródła 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 powyższym komunikacie o błędzie oznacza, że rozmiar identyfikatora URI żądania przekracza 7 KB. Dlatego Apigee Edge zgłasza wyjątek com.apigee.errors.http.user.RequestURITooLong i zwraca aplikacjom klienckim kod błędu 414 z kodem błędu protocol.http.TooBigline .

Rozdzielczość

Stały rozmiar

Opcja nr 1 [zalecana]: napraw aplikację kliencką, aby nie wysyłała identyfikatora URI żądania o rozmiarze większym niż dozwolony limit

  1. Przeanalizuj, dlaczego dany klient wysłał żądanie identyfikatora URI żądania, którego rozmiar przekracza dozwolony limit określony w sekcji Limity.
  2. Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką tak, aby przesyłała identyfikator URI żądania o rozmiarze mniejszym niż dozwolony limit.

    W przykładzie powyżej możesz rozwiązać problem, przekazując długi parametr zapytania jako część treści/ładunku żądania, zamiast przekazywać go w ramach adresu URL żądania, jak pokazano poniżej:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Jeśli chcesz, aby identyfikator URI był większy niż dozwolony limit, przejdź do następnych 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ą wierszy żądań ani odpowiedzi, których rozmiar przekracza dozwolony limit określony w sekcji Limit wierszy żądań/odpowiedzi w sekcji Limity brzegowe Apigee.

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

Jak sprawdzić aktualny limit?

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

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

    Oznacza to, że limit rozmiaru wiersza żądania skonfigurowanego w Apigee dla Private Cloud to 7 KB.

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 414
  • 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 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 rzeczywistymi wartościami.

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