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 431 Request Header Fields Too
Large
z kodem błędu protocol.http.TooBigHeaders
.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 431 Request Header Fields Too Large
Oprócz tego może pojawić się ten komunikat o błędzie:
{ "fault":{ "faultstring":"request headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Możliwe przyczyny
Ten błąd występuje, jeśli łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką do Apigee Edge w ramach żądania HTTP przekracza dozwolony limit w Apigee Edge zgodnie z RFC 6585, sekcja 5: 431 Pola nagłówka żądania są zbyt duże.
Oto możliwe przyczyny tego błędu:
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Rozmiar nagłówków żądań przekracza dozwolony limit | Łączny rozmiar wszystkich nagłówków wysyłanych 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.TooBigHeaders
i kodem stanu431
, jak pokazano poniżej: Informacje o kodzie błędu
protocol.http.TooBigHeaders
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:
431
- Źródło błędu:
apigee
- Kod błędu:
protocol.http.TooBigHeaders
. - Długość żądania(bajty):
32150 (> 25 KB)
- Kod stanu:
- Jeśli źródło błędu ma wartość
apigee
lubMP
, kod błędu ma wartośćprotocol.http.TooBigHeaders
, a długość żądania jest większa niż 25 KB, co oznacza, że łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką w ramach żądania HTTP przekracza dozwolony limit 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
431
. 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
431
w danym okresie (jeśli problem występował w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z431
. Jeśli znajdziesz błędy
431
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.TooBigHeaders
X-Apigee-fault-source MP
Zwróć uwagę na długość żądania:
40159
(40 KB to więcej niż 25 KB, czyli dozwolony limit dla nagłówków żądań w Apigee Edge)W powyższym przykładowym wpisie logu X-Apigee-fault-source ma wartość
apigee
lubMP
, kod X-Apigee-fault-code ma wartośćprotocol.http.TooBigHeaders
, a długość żądania to 40 KB, czyli więcej niż dozwolony limit w Apigee – 25 KB. Wskazuje to wyraźnie, że łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką w ramach żądania HTTP przekroczył dozwolony limit 25 KB w Apigee Edge.
Przyczyna: rozmiar nagłówków żądań przekracza dozwolony limit
Diagnostyka
- Określ kod błędu, źródło błędu i rozmiar żądania dla błędu zaobserwowanego w logach monitorowania interfejsów API lub w logach dostępu NGINX zgodnie z opisem w sekcji Typowe czynności diagnostyczne.
- Jeśli źródło błędu ma wartość
apigee
lubMP
, kod błędu ma wartośćprotocol.http.TooBigHeaders
, a długość żądania jest większa niż 25 KB, oznacza to, że rozmiar żądania wysłanego przez aplikację kliencką do Apigee przekracza dozwolony limit w Apigee Edge. - Aby sprawdzić, czy rozmiar nagłówków żądania przekracza dozwolony limit 25 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
oznacza, że łączny rozmiar nagłówków żądań przekracza dozwolony limit 25 KB.Przykładowy komunikat o błędzie:
"faultstring":"request headers size exceeding 25,600"
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 nagłówków przekazanych w żądaniu.
Jeśli okaże się, że łączny rozmiar nagłówków przekracza dozwolony limit w Apigee Edge, to jest przyczyną problemu.
Przykładowe żądanie:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
W powyższych przypadkach łączny rozmiar nagłówków
header0
,header1
,header2
iheader3
jest większy niż 25 KB, czyli zawiera więcej niż 25 tys. znaków ASCII (bajtów).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 chmury prywatnej, możesz użyć logów procesora wiadomości, aby sprawdzić, czy rozmiar nagłówków żądań przekroczył 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
431
(jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które wciąż kończą się niepowodzeniem z użyciem metody431
. Możesz użyć następujących ciągów wyszukiwania.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Zobaczysz wiersze ze źródła
system.log
podobne do tych:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
Tekst
message = request headers size exceeding 25,600
w powyższym komunikacie o błędzie oznacza, że łączny rozmiar nagłówków żądań przekracza 25 KB. Dlatego Apigee Edge zgłasza wyjątekcom.apigee.errors.http.user.RequestHeadersTooLarge
i zwraca aplikacjom klienckim kod błędu431
z kodem błęduprotocol.http.TooBigHeaders
.
Rozdzielczość
Stały rozmiar
Opcja nr 1 [zalecana]: napraw aplikację kliencką, aby nie wysyłała nagłówków żądań o łącznym rozmiarze przekraczającym dozwolony limit
- Przeanalizuj przyczynę wysłania przez konkretnego klienta nagłówka żądania o dużym rozmiarze, który sprawia, że łączny rozmiar nagłówka przekracza limit określony w limitach.
Jeśli nie chcesz, zmodyfikuj aplikację kliencką tak, aby wysyłała nagłówki żądań o rozmiarze mniejszym niż dozwolony limit.
W przykładzie powyżej możesz rozwiązać problem, przekazując parametr wartości długiego nagłówka jako część treści/ładunku żądania:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- Jeśli chcesz wysłać nagłówek większy niż dozwolony limit, przejdź do następnej 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ą nagłówków żądań/odpowiedzi, których rozmiar przekracza dozwolony limit określony dla limitu rozmiaru nagłówków żądań/odpowiedzi w limitach Edge Apigee.
- Jeśli jesteś użytkownikiem chmury publicznej, maksymalny rozmiar nagłówków żądań i odpowiedzi jest zgodny z rozmiarem nagłówka żądania/odpowiedzi w sekcji Limity Edge Apigee.
- Jeśli jesteś użytkownikiem Private Cloud , możesz zmienić domyślny maksymalny limit rozmiaru nagłówków żądań i odpowiedzi (chociaż nie jest to zalecane). Maksymalny limit rozmiaru nagłówka żądania możesz określić, wykonując instrukcje z artykułu Jak sprawdzić bieżący limit.
Jak sprawdzić aktualny limit?
Ta sekcja wyjaśnia, jak sprawdzić, czy właściwość HTTPRequest.headers.limit
została zaktualizowana o nową wartość w procesorach wiadomości.
- Na komputerze procesora wiadomości wyszukaj właściwość
HTTPRequest.headers.limit
w katalogu/opt/apigee/edge-message-processor/conf
i sprawdź, jaka wartość została ustawiona, jak pokazano poniżej:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Przykładowy wynik tego polecenia:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
W powyższych przykładach wyjściowych warto zauważyć, że właściwość
HTTPRequest.headers.limit
została ustawiona z wartością25k
w językuhttp.properties
.Oznacza to, że limit rozmiaru nagłówka żądania skonfigurowanego w Apigee dla Private Cloud to 25 KB.
Specyfikacja
Apigee Edge wymaga, aby aplikacja kliencka nie wysyłała w ramach żądania nagłówków o dużym rozmiarze. Jeśli żądanie zawiera nagłówki, których łączny rozmiar przekracza określony limit, Apigee zgłasza 431 Request Header Fields Too Large
zgodnie z tymi specyfikacjami RFC:
Specyfikacja |
---|
RFC 6585, sekcja 5: 431 Pola nagłówka żądania są za duże |
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łędu431
- 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łędu431
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