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:
- Request-Line
- ( Zestaw nagłówków HTTP )
- [ 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
- 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ż zawiera19 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. - 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:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przełącz się na organizację, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz przedział czasu, w którym zaobserwowano błędy.
- Porównaj kod błędu z czasem.
- Wybierz komórkę z kodem błędu
protocol.http.TooBigLine
i kodem stanu414
, jak pokazano poniżej: Informacje o kodzie błędu
protocol.http.TooBigline
wyświetlą się poniżej:Kliknij Wyświetl logi i rozwiń wiersz dotyczący nieudanego żądania:
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)
- Kod stanu:
- Jeśli źródło błędu ma wartość
apigee
lubMP
, 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:
- 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
. 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.
- 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 z414
. 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
- 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.
- Jeśli źródło błędu ma wartość
apigee
lubMP
, oznacza to, że rozmiar żądania wysłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge. - 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:
- Sprawdź rozmiar identyfikatora URI przekazanego w żądaniu.
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.
Sprawdź dzienniki procesora wiadomości:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 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 metody414
. Możesz użyć następujących ciągów wyszukiwania.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- 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ątekcom.apigee.errors.http.user.RequestURITooLong
i zwraca aplikacjom klienckim kod błędu414
z kodem błęduprotocol.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
- Przeanalizuj, dlaczego dany klient wysłał żądanie identyfikatora URI żądania, którego rozmiar przekracza dozwolony limit określony w sekcji Limity.
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
- 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.
- 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.
- 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.
- 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
- Przykładowy wynik tego polecenia:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
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ęzykuhttp.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łędu414
- 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łędu414
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