Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 414 Request-URI Too Long z
kodem błędu protocol.http.TooBigLine w 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że też pojawić się ten komunikat o błędzie:
{
"fault":{
"faultstring":"request line size exceeding 7,168",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}
Zwróć uwagę, że 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 wysłanego przez aplikację kliencką do Apigee Edge w ramach żądania HTTP jest większy niż dozwolony limit w Apigee Edge.
Zanim przyjrzymy się możliwym przyczynom tego błędu, wyjaśnijmy, co oznacza wiersz żądania i jak sprawdzić jego rozmiar.
Informacje o wierszu żądania
Typowe żądanie HTTP składa się z 3 części:
- Wiersz żądania
- ( Zestaw nagłówków HTTP )
- [ 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, który trafia do serwera, zawiera wiersz żądania opisany powyżej. Następnie przesyłane są nagłówki i treść żądania.
Poniższy przykładowy zrzut ekranu przedstawia typowe curl żądanie, część Request (wraz z wierszem żądania) i część Response.
Informacje o rozmiarze wiersza żądania
- W omówionym powyżej przykładzie wiersz początkowy (pierwszy wiersz) w żądaniu, nazywany też wierszem żądania, wygląda tak:
GET /test/ HTTP/1.1
Rozmiar wiersza żądania wynosi
~19 bytesponieważ zawiera19 ASCII characters. Ponieważ mieści się on w dozwolonym limicie w Apigee Edge, żądanie jest przetwarzane bez błędów i otrzymujesz odpowiedź. - Podobnie, jeśli przyjrzysz się
faultstringw komunikacie o błędzie pokazanym powyżej, zobaczysz tam tekst"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, których dotyczy |
|---|---|---|
| Rozmiar ładunku żądania jest większy niż dozwolony limit | Rozmiar identyfikatora URI żądania wysłanego przez aplikację kliencką w ramach żądania HTTP do Apigee Edge jest większy niż dozwolony limit w Apigee Edge. | Użytkownicy publicznej i prywatnej chmury Edge |
Typowe czynności diagnostyczne
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Monitorowanie interfejsu API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przejdź do organizacji, w której chcesz zbadać problem.
- Otwórz stronę Analyze > API Monitoring > Investigate (Analiza > Monitorowanie interfejsu API > Zbadaj).
- Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
- Wykreśl kod błędu względem czasu.
- Wybierz komórkę z kodem błędu
protocol.http.TooBigLinei kodem stanu414, jak pokazano poniżej:
Zobaczysz informacje o kodzie błędu
protocol.http.TooBiglinejak pokazano poniżej:
Kliknij View logs (Wyświetl logi) i rozwiń wiersz nieudanego żądania:
W oknie Logs (Logi) zanotuj te informacje:
- Status Code (Kod stanu):
414 - Fault Source (Źródło błędu):
apigee - Fault Code (Kod błędu):
protocol.http.TooBigLine. - Request Length(bytes) (Długość żądania (w bajtach)):
7244 (> 7KB)
- Status Code (Kod stanu):
- Jeśli Fault Source (Źródło błędu) ma wartość
apigeelubMP, Fault Code (Kod błędu) ma wartośćprotocol.http.TooBigLine, a Request-Length (Długość żądania) jest większa niż 7 KB, oznacza to, że żądanie HTTP od klienta ma identyfikator URI żądania większy niż dozwolony limit w Apigee.
Narzędzie Trace
NGINX
Aby zdiagnozować błąd za pomocą logów dostępu NGINX:
- Jeśli jesteś użytkownikiem prywatnej chmury, możesz użyć logów dostępu NGINX, aby
określić kluczowe informacje o błędach HTTP
414. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) nie ma błędów
414lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu414. Jeśli znajdziesz błędy
414z X-Apigee-fault-code pasującym do wartościprotocol.http.TooBigLine, określ wartość X-Apigee-fault-source.
Powyższy przykładowy wpis z logu dostępu NGINX ma te wartości dla X-Apigee-fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source policyZwróć 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 długości żądania w przypadku błędu zaobserwowanego za pomocą monitorowania interfejsu API, narzędzia Trace lub logów dostępu NGINX, jak opisano w sekcji Typowe czynności diagnostyczne.
- Jeśli Fault Source (Źródło błędu) ma wartość
apigeelubMP, oznacza to, że rozmiar żądania wysłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge. - Możesz sprawdzić, czy rozmiar wiersza żądania przekroczył dozwolony limit 7 KB, za pomocą jednej z
tych metod:
Komunikat o błędzie
Aby sprawdzić, czy komunikat o błędzie jest prawidłowy:
Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, to sprawdź
faultstring. Wartośćfaultstringwskazuje, ż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 sprawdzić, czy rzeczywiste żądanie jest prawidłowe:
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 okaże się, że rozmiar identyfikatora URI jest większy niż dozwolony limit w Apigee Edge, to jest to przyczyna problemu.
Przykładowe żądanie:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
W powyższym przypadku wartość parametru zapytania
qparamjest większa niż 7 KB, czyli zawiera więcej niż 7 tys. znaków ASCII.Jeśli używasz innego klienta, możesz sprawdzić jego logi i spróbować określić rozmiar wiersza żądania wysyłanego do Apigee Edge.
Logi procesora komunikatów
Aby sprawdzić, czy logi procesora komunikatów są prawidłowe:
Jeśli jesteś użytkownikiem prywatnej chmury, możesz użyć logów procesora komunikatów, aby sprawdzić, czy rozmiar wiersza żądania przekroczył dozwolony limit w Apigee Edge.
Sprawdź logi procesora komunikatów:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Sprawdź, czy w określonym
czasie (jeśli problem wystąpił w przeszłości) nie ma błędów
414lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu414. Możesz użyć tych ciągów wyszukiwania.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Znajdziesz wiersze z
system.logpodobne 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,168w powyższym komunikacie o błędzie wskazuje, że rozmiar identyfikatora URI żądania jest większy niż 7 KB. Dlatego Apigee Edge zgłasza wyjątekcom.apigee.errors.http.user.RequestURITooLongi zwraca414kod stanu z kodem błęduprotocol.http.TooBiglinedo aplikacji klienckich.
Rozwiązanie
Napraw rozmiar
Opcja 1 [zalecana]: zmień aplikację kliencką, aby nie wysyłała identyfikatora URI żądania o rozmiarze większym niż dozwolony limit
- Przeanalizuj przyczynę, dla której konkretny klient wysyła identyfikator URI żądania o rozmiarze większym niż dozwolony limit określony w sekcji Limity.
Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką, aby wysyłała identyfikator URI żądania o rozmiarze mniejszym niż dozwolony limit.
W omówionym powyżej przykładzie możesz rozwiązać problem, przekazując długi parametr zapytania jako część treści żądania zamiast jako część adresu URL żądania, jak pokazano poniżej:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- Jeśli jest to pożądane i chcesz wysłać identyfikator URI o rozmiarze większym niż dozwolony limit, przejdź do następnych 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ć wierszy żądania ani odpowiedzi o rozmiarach większych niż dozwolony limit, jak opisano w sekcji Limit wiersza żądania/odpowiedzi w artykule Limity Apigee Edge.
- Jeśli jesteś użytkownikiem chmury publicznej, maksymalny limit rozmiaru wiersza żądania i odpowiedzi jest zgodny z limitem rozmiaru wiersza żądania/odpowiedzi w artykule Limity Apigee Edge.
- Jeśli jesteś użytkownikiem prywatnej chmury , możesz zmodyfikować domyślny maksymalny limit rozmiaru wiersza żądania i odpowiedzi (chociaż nie jest to zalecane). Maksymalny limit rozmiaru wiersza żądania możesz określić, wykonując instrukcje opisane w sekcji Jak sprawdzić bieżący limit.
Jak sprawdzić bieżący limit?
W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPRequest.line.limit została
zaktualizowana o nową wartość w procesorach komunikatów.
- Na maszynie procesora komunikatów wyszukaj właściwość
HTTPRequest.line.limitw katalogu/opt/apigee/edge-message-processor/confi sprawdź, jaka wartość została ustawiona, jak pokazano poniżej:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- Przykładowy wynik powyższego polecenia:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
W powyższych danych wyjściowych zwróć uwagę, że właściwość
HTTPRequest.line.limitzostała ustawiona na wartość7kw plikuhttp.properties.Oznacza to, że limit rozmiaru wiersza żądania skonfigurowany w Apigee dla prywatnej chmury wynosi 7 KB.
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, przejdź do sekcji 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
curlużyte do odtworzenia błędu414 - Plik śledzenia żądań do interfejsu API
Jeśli jesteś użytkownikiem prywatnej chmury, 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
curlużyte do odtworzenia błędu414 Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: 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