Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 413 Request Entity Too Large
z kodem błędu protocol.http.TooBigBody w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 413 Request Entity Too Large
Możesz też zobaczyć następujący komunikat o błędzie:
{
"fault":{
"faultstring":"Body buffer overflow",
"detail":{
"errorcode":"protocol.http.TooBigBody"
}
}
}Możliwe przyczyny
Ten błąd występuje, jeśli rozmiar ładunku wysyłany przez aplikację kliencką do Apigee Edge w ramach Żądanie HTTP przekracza dozwolony limit w Apigee Edge .
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 ładunku wysyłany przez aplikację kliencką w ramach żądania HTTP do Apigee Edge wynosi przekracza dozwolony limit w Apigee Edge. | Użytkownicy chmury publicznej i prywatnej Edge |
| Rozmiar ładunku żądania przekracza dozwolony limit po dekompresja | Rozmiar ładunku wysłanego w formacie skompresowanym przez aplikację kliencką w ramach protokołu HTTP żądania do Apigee Edge przekraczają dozwolony limit podczas zdekompresowania przez 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:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z uprawnieniami odpowiednią rolę.
Przełącz się na organizację, w której chcesz zbadać problem
- Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
- Wybierz okres, w którym zaobserwowano błędy.
- Aby zawęzić kod błędu, możesz wybrać filtr Serwer proxy.
- Porównaj Kod błędu z czasem.
Wybierz komórkę, która zawiera kod błędu
protocol.http.TooBigBodyi Kod stanu413jak poniżej:
Informacje o kodzie błędu
protocol.http.TooBigBodysą wyświetlane jako poniżej:
- Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania. Następnie z poziomu
Logi zwróć uwagę na poniższe szczegóły :
Nieskompresowany
Scenariusz 1. Żądanie ładunku wysłane w formie nieskompresowanej
W oknie Logi zwróć uwagę na te informacje:
- Kod stanu:
413 - Źródło błędu:
proxy - Kod błędu:
protocol.http.TooBigBody. - Długość żądania(bajty):
15360440(ok. 15 MB)
Jeśli Źródło błędu ma wartość
proxy, parametr Fault Code ma wartośćprotocol.http.TooBigBodyi Długość żądania przekracza 10 MB, oznacza to, że żądanie HTTP od klienta zawiera rozmiar ładunku żądania większy niż dozwolony limit w Apigee.Skompresowany
Scenariusz 2. Żądanie ładunku wysłane w formie skompresowanej
W oknie Logi zwróć uwagę na te informacje:
- Kod stanu:
413 - Źródło błędu:
proxy - Kod błędu:
protocol.http.TooBigBody. - Długość żądania(bajty):
15264(ok. 15 kB)
Jeśli Źródło błędu ma wartość
proxy, parametr Fault Code ma wartośćprotocol.http.TooBigBody, a Długość żądania to mniej niż 10 MB, oznacza to, że żądanie HTTP od klienta zawiera rozmiar ładunku żądania jest niższy niż dozwolony limit w formacie skompresowanym, ale rozmiar ładunku po zdekompresowaniu przez Apigee przekracza dozwolony limit. - Kod stanu:
Śledzenie
Aby zdiagnozować błąd za pomocą narzędzia śledzenia:
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj na wystąpienie błędu
413 Request Entity Too Largelub - Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz te dane.
413 Request Entity Too Largebłąd
- Poczekaj na wystąpienie błędu
Sprawdź, czy opcja Show all Flow Infos (Pokaż wszystkie informacje o przepływie) jest włączona.
- Wybierz jedno z nieudanych żądań i sprawdź log czasu.
- Przejdź do etapu Prośba otrzymana od klienta.
Nieskompresowany
Scenariusz 1. Żądanie ładunku wysłane w formie nieskompresowanej
Uwaga:
- Content-Encoding: brak
- Długość treści:
15360204
Skompresowany
Scenariusz 2. Żądanie ładunku wysłane w formie skompresowanej
Uwaga:
- Kodowanie treści:
gzip - Długość treści:
14969 - Typ treści:
application/x-gzip
- Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
Błąd występuje zwykle w ramach procesu po żądaniu otrzymania od Faza klienta, jak pokazano poniżej:
- Zwróć uwagę na wartość błędu z śladu. Powyższy przykładowy log czasu pokazuje:
- błąd:
Body buffer overflow - error.class::
com.apigee.errors.http.user.RequestTooLarge
- błąd:
Przejdź do obszaru Response Sent to Client (Odpowiedź wysłana do klienta) i zanotuj wartości błędu z parametru śledzić. Oto przykładowy log czasu:
- błąd:
413 Request Entity Too Large - Treść błędu:
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
- błąd:
- Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
W sekcji Szczegóły etapu przewiń w dół do pozycji Odczyt zmiennych.
- Określ wartość zmiennej client.received.content.length , która wskazuje:
- Rzeczywisty rozmiar ładunku żądania, gdy jest on wysyłany w formacie nieskompresowanym
- Rozmiar ładunku żądania po dekompresji przez Apigee, gdy ładunek to wysyłane w formacie skompresowanym. Będzie ona zawsze taka sama jak wartość dozwolonych (10 MB) w tym scenariuszu.
Nieskompresowany
Scenariusz 1. Żądanie ładunku w formie nieskompresowanej
Zmienna klienta.received.content.length:
15360204Skompresowany
Scenariusz 2. Żądanie ładunku w formacie skompresowanym
Zmienna klienta.received.content.length:
10489856 - W tabeli poniżej wyjaśniamy, dlaczego Apigee zwraca błąd
413w dwa scenariusze oparte na wartości client.received.content.length zmiennej:Scenariusz Wartość client.received.content.length Przyczyna niepowodzenia Żądanie ładunku w nieskompresowanym formacie Ok. 15 MB Rozmiar > dozwolony limit to 10 MB. Żądanie ładunku w formacie skompresowanym Ok. 10 MB Przekroczono limit rozmiaru podczas dekompresji
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
413. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Wyszukaj błędy (
413) w tym okresie (jeśli wystąpił problem w przeszłości) lub jeśli jakieś żądania nadal kończą się niepowodzeniem413 - Jeśli znajdziesz błędy
413w dopasowaniu X-Apigee-fault-code wartośćprotocol.http.TooBigBody, a następnie ustal wartość X-Apigee-fault-source.Nieskompresowany
Scenariusz 1. Żądanie rozmiaru ładunku w formacie nieskompresowanym
Powyższy przykładowy wpis 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.TooBigBodyX-Apigee-fault-sourc policyZwróć uwagę na długość żądania:
15360440(14,6 MB > dozwolony limit).Skompresowany
Scenariusz 2. Żądanie rozmiaru ładunku w formacie skompresowanym
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.TooBigBodyX-Apigee-fault-source policyZwróć uwagę na długość żądania:
15264(14,9 KB < dozwolony limit)W tym scenariuszu Apigee Edge zwraca wartość
413, mimo że Długość żądania jest mniejsza niż dozwolony limit, ponieważ żądanie może zostały wysłane w formacie skompresowanym, a rozmiar ładunku przekracza podczas dekompresji w Apigee Edge.
Przyczyna: rozmiar ładunku żądania przekracza dozwolony limit
Diagnostyka
- Określ kod błędu, źródło błędu i rozmiar ładunku żądania dla zaobserwowany błąd przy użyciu monitorowania API, narzędzia Trace lub logów dostępu NGINX, jak wyjaśniono w artykule Typowe kroki diagnostyki w scenariuszu 1 (bez kompresji).
- Jeśli Źródło błędu ma wartość
policylubproxy, to wskazuje, że rozmiar ładunku żądania wysłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge. - Sprawdź Rozmiar ładunku żądania określony w kroku 1.
- Jeśli rozmiar ładunku > Limit 10 MB, to jest przyczyną błędu.
- Jeśli rozmiar ładunku < dozwolony limit wynosi 10 MB, wówczas żądanie może jest przekazywany w formacie skompresowanym. Przejdź do strony Przyczyna: rozmiar ładunku żądania po dekompresji przekracza dozwolony limit
- Możesz też sprawdzić, czy rozmiar ładunku żądania to rzeczywiście Dozwolony limit 10 MB przez
sprawdzając faktyczne żądanie, wykonując te czynności:
- Jeśli nie masz dostępu do rzeczywistego żądania wysłanego przez aplikację kliencką, otwórz Rozwiązanie.
- Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj
następujące kroki:
- Sprawdź rozmiar ładunku przekazywanego w żądaniu.
- Jeśli okaże się, że rozmiar ładunku jest większy niż dozwolony limit w Apigee Edge, to jest przyczyną problemu.
Przykładowe żądanie:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
W tym przypadku rozmiar pliku
test15mbfilewynosi ok. 15 MB. Jeśli korzystają z innego klienta, pobierz logi klienta, aby sprawdzić rozmiar wysyłanego ładunku.
Rozdzielczość
Kliknij Rozwiązanie.
Przyczyna: rozmiar ładunku żądania po dekompresji przekracza dozwolony limit
Jeśli ładunek żądania jest wysyłany w formacie skompresowanym i nagłówek żądania
Content-Encoding ma wartość gzip, Apigee dekompresuje żądanie
ładunek. Jeśli podczas procesu dekompresji Apigee stwierdzi, że rozmiar ładunku jest większy
powyżej 10 MB,
do dozwolonego limitu, następnie zatrzymuje dalszą dekompresję i reaguje
natychmiast z kodem błędu 413 Request Entity Too Large
protocol.http.TooBigBody
Diagnostyka
- Określ kod błędu, źródło błędu i rozmiar ładunku żądania. dla błędu zaobserwowanego za pomocą usługi API Monitoring, narzędzia śledzenia lub logów dostępu NGINX, jak opisano w Typowe kroki diagnostyki w scenariuszu nr 2 (skompresowanym).
- Jeśli Źródło błędu ma wartość
policylubproxy, oznacza to, że rozmiar ładunku żądania wysyłany przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge. - Sprawdź Rozmiar ładunku żądania zgodnie z krokiem 1.
- Jeśli rozmiar ładunku > Limit 10 MB, to jest przyczyną błędu.
- Jeśli rozmiar ładunku < dozwolony limit wynosi 10 MB, wówczas żądanie może jest przekazywany w formacie skompresowanym. W takim przypadku sprawdź rozmiar pliku nieskompresowanego skompresowanego ładunku żądania.
- Możesz sprawdzić, czy żądanie od klienta zostało wysłane w formacie skompresowanym, a tag
rozmiar nieskompresowany był większy niż dozwolony limit w przypadku jednego z tych elementów
metody:
Śledzenie
Aby sprawdzić poprawność za pomocą narzędzia śledzenia:
- Jeśli masz zarejestrowany ślad dla nieudanego żądania, zapoznaj się z krokami opisanymi w
Trace i
- Określ wartość zmiennej client.received.content.length .
- Sprawdź, czy żądanie od klienta zawierało kodowanie Content-Encoding:
gzipnagłówek
- Jeśli wartość zmiennej client.received.content.length jest większa niż
10 MB,
dozwolony limit oraz nagłówek żądania Content-Encoding:
gzip, to jest przyczyną tego błędu.
Rzeczywiste żądanie
Aby przeprowadzić weryfikację na podstawie rzeczywistego żądania:
- Jeśli nie masz dostępu do rzeczywistego żądania wysłanego przez aplikację kliencką, otwórz Rozwiązanie.
- Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj
następujące kroki:
- Sprawdź rozmiar ładunku przekazywanego w żądaniu wraz z
Nagłówek
Content-Encodingzostał wysłany w żądaniu. Sprawdź, czy rozmiar ładunku nieskompresowanego nie jest większy niż dozwolony limit w Apigee Edge
Przykładowe żądanie:
curl https://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile.gz -H "Content-Encoding: gzip" -v
W tym przypadku plik
test15mbfile.gzjest mniejszy niż limit rozmiaru, jednak rozmiar nieskompresowanego plikutest15mbfilewynosi około 15 MB. nagłówekContent-Encodingtogzip.Jeśli używasz innego klienta, pobierz logi klienta, aby sprawdzić rozmiar ładunku jest wysyłane, a nagłówek
Content-Encodingjest ustawiony nagzip.
- Sprawdź rozmiar ładunku przekazywanego w żądaniu wraz z
Nagłówek
Logi procesora wiadomości
Aby przeprowadzić weryfikację za pomocą logów procesora wiadomości:
- Jeśli jesteś użytkownikiem Private Cloud, możesz za pomocą logów procesora wiadomości określić
Kluczowe informacje o błędach HTTP
413. Sprawdź dzienniki procesora wiadomości:
/opt/apigee/var/log/edge-message-processor/logs/system.logWyszukaj błędy
413, aby sprawdzić, czy w danym okresie nie wystąpiły jakieś błędy (jeśli w przeszłości) lub jeśli jakieś żądania nadal kończą się niepowodzeniem (413).Możesz użyć następujących ciągów wyszukiwania:
grep -ri "chunkCount"
grep -ri "RequestTooLarge"
- Znajdziesz tam wiersze z domeny
system.logpodobne do tych poniżej (TotalReadichunkCountmogą się różnić w Twoim przypadku):2021-07-06 13:29:57,544 NIOThread@1 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2570 2021-07-06 13:29:57,545 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: com.apigee.errors.http.user.RequestTooLarge : Body buffer overflow
- Podczas procesu dekompresji, gdy tylko procesor wiadomości określi łączną wartość,
odczyt bajtów to > 10 MB, zatrzymuje się i wydrukuje następujący wiersz:
Message is too large. TotalRead 10489856 chunkCount 2570
Oznacza to, że rozmiar ładunku żądania wynosi więcej niż 10 MB, a Apigee przesyła błąd
RequestTooLarge, gdy rozmiar zaczyna przekraczać limit 10 MB z kodem błędu:protocol.http.TooBigBody
- Jeśli masz zarejestrowany ślad dla nieudanego żądania, zapoznaj się z krokami opisanymi w
Trace i
Rozdzielczość
Popraw rozmiar
Opcja nr 1 [zalecana]: popraw aplikację kliencką, aby nie wysyłała ładunków większych niż dozwolony limit
- Przeanalizuj przyczynę, dla której dany klient wysłał żądanie lub ładunek o rozmiarze większym niż dozwolony zgodnie z opisem w sekcji Limity.
Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką tak, aby wysyłała żądanie / ładunek rozmiar mniejszy niż dozwolony limit.
W przykładzie powyżej możesz rozwiązać problem, przesyłając plik o mniejszym rozmiarze, powiedzmy
test5mbfile(z rozmiarem 5 MB), jak w przykładzie poniżej:curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
- Jeśli jest to pożądane i chcesz wysłać żądania lub ładunek więcej niż dozwolony limit, otwórz kolejne opcje.
Wzorzec podpisanego adresu URL
Opcja nr 2 [zalecana]: użyj wzorca podpisanego adresu URL w Apigee JavaCallout
W przypadku ładunków większych niż 10 MB Apigee zaleca używanie wzorca podpisanego adresu URL w tagu Apigee JavaCallout, ilustrowane przez Przykład Edge Callout: Generator podpisanego adresu URL w GitHubie.
Streaming
Opcja 3. Korzystanie ze strumieniowania
Jeśli serwer proxy interfejsu API musi obsługiwać bardzo duże żądania lub odpowiedzi, możesz włączyć strumieniowaniem w Apigee.
CwC
Opcja 4. Użyj właściwości CwC, aby zwiększyć limit bufora
Tej opcji należy używać tylko wtedy, gdy nie możesz użyć żadnej z zalecanych opcji, ponieważ może to w przypadku zwiększenia rozmiaru domyślnego mogą stanowić problemy z wydajnością.
Apigee zapewnia Właściwość CwC, która umożliwia zwiększanie limit rozmiaru ładunków żądań i odpowiedzi. Więcej informacji: Ustaw limit rozmiaru wiadomości w routerze lub procesorze wiadomości
Limity
Apigee oczekuje, że aplikacja kliencka i serwer backendu nie będą wysyłać ładunków o rozmiarach większych niż
dozwolony limit zgodnie z informacjami dla Request/response size w
Limity Apigee Edge.
- Jeśli jesteś użytkownikiem Public Cloud, maksymalny limit żądań i odpowiedzi
rozmiar ładunku jest taki sam jak w przypadku
Request/response sizew Limity Apigee Edge. - Jeśli jesteś użytkownikiem Private Cloud , możliwe, że wartości domyślne zostały zmienione limitu rozmiaru ładunku żądań i odpowiedzi (mimo że nie jest to zalecana metoda). Maksymalny rozmiar ładunku żą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.body.buffer.limit
.
- Na komputerze z procesorem wiadomości wyszukaj właściwość
HTTPRequest.body.buffer.limitw katalogu/opt/apigee/edge-message- processor/confi sprawdź, jaka wartość została ustawiona za pomocą tych metod polecenie:grep -ri "HTTPRequest.body.buffer.limit" /opt/apigee/edge-message-processor/conf
- Przykładowy wynik powyższego polecenia jest taki:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
Zwróć uwagę na to, że w przykładowych danych wyjściowych powyżej Parametr
HTTPRequest.body.buffer.limitzostał ustawiony na wartość10mwhttp.propertiesWskazuje, że limit rozmiaru ładunku żądania skonfigurowanego w Apigee dla prywatnych Chmura ma 10 MB.
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
- Kompletne polecenie curl użyte do odtworzenia błędu
413 - 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
- Kompletne polecenie curl użyte do odtworzenia błędu
413 Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: 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