Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 431 Request Header Fields Too
Large z kodem błędu protocol.http.TooBigHeaders w odpowiedzi na wywołania interfejsu API
calls.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 431 Request Header Fields Too Large
Może też 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 jest większy niż dozwolony limit w Apigee Edge zgodnie z RFC 6585, sekcja 5: 431 Request Header Fields Too Large.
Oto możliwe przyczyny tego błędu:
| Przyczyna | Opis | Instrukcje rozwiązywania problemów, których dotyczy |
|---|---|---|
| Rozmiar nagłówków żądań jest większy niż 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 Edge |
Typowe czynności diagnostyczne
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub technik:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów 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 interfejsów API > Zbadaj).
- Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
- Wykreśl Fault Code (Kod błędu) względem Time (Czas).
- Wybierz komórkę z kodem błędu
protocol.http.TooBigHeadersi kodem stanu431jak poniżej:
Zobaczysz informacje o kodzie błędu
protocol.http.TooBigHeadersjak poniżej:
Kliknij View logs (Wyświetl logi) i rozwiń wiersz nieudanego żądania:
W oknie Logs (Logi) zanotuj te informacje:
- Status Code (Kod stanu):
431 - Fault Source (Źródło błędu):
apigee - Fault Code (Kod błędu):
protocol.http.TooBigHeaders. - Request Length(bytes) (Długość żądania (bajty)):
32150 (> 25 KB)
- 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.TooBigHeaders, a Request Length (Długość żądania) jest większa niż 25 KB, oznacza to, że łączny rozmiar wszystkich nagłówków żądań wysyłanych przez aplikację kliencką w ramach żądania HTTP jest 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 chmury prywatnej, możesz użyć logów dostępu NGINX, aby
określić kluczowe informacje o błędach HTTP
431. 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 występują błędy
431(jeśli problem wystąpił w przeszłości) lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu431. Jeśli znajdziesz błędy
431z X-Apigee-fault-code pasującym do wartościprotocol.http.TooBigHeaders, określ wartość X-Apigee-fault-source.
W powyższym przykładowym wpisie z logu dostępu NGINX X-Apigee-fault-code i X-Apigee-fault-source: mają te wartości:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source MPZwróć uwagę na długość żądania:
40159(40 KB jest większe 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ść
apigeelubMP, X-Apigee-fault-code ma wartośćprotocol.http.TooBigHeaders, a Request Length (Długość żądania) wynosi 40 KB, czyli więcej niż dozwolony limit w Apigee – 25 KB. Wyraźnie wskazuje to, ż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ń jest większy niż dozwolony limit
Diagnostyka
- Określ Fault Code (Kod błędu), Fault Source (Źródło błędu) i Request-Length size (Rozmiar długości żądania) dla zaobserwowanego błędu za pomocą monitorowania interfejsów API lub logów dostępu NGINX zgodnie z opisem w sekcji Typowe czynności diagnostyczne.
- Jeśli Fault Source (Źródło błędu) ma wartość
apigeelubMP, Fault Code (Kod błędu) ma wartośćprotocol.http.TooBigHeaders, a Request Length (Długość żądania) jest większa niż 25 KB, oznacza to, że rozmiar żądania wysyłanego przez aplikację kliencką do Apigee jest większy niż dozwolony limit w Apigee Edge. - Możesz sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, używając jednej z
tych metod:
Komunikat o błędzie
Aby sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, użyj komunikatu o błędzie:
Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, to sprawdź
faultstring. Thefaultstringwskazuje, że łączny rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB.Przykładowy komunikat o błędzie:
"faultstring":"request headers size exceeding 25,600"
Rzeczywiste żądanie
Aby sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, użyj rzeczywistego żądania:
Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj te czynności:
- Sprawdź rozmiar nagłówków przekazywanych w żądaniu.
Jeśli okaże się, że łączny rozmiar nagłówków jest większy niż dozwolony limit w Apigee Edge, to jest to przyczyna 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ższym przykładzie łączny rozmiar nagłówków
header0,header1,header2, iheader3jest większy niż 25 KB, czyli zawiera więcej niż 25 tys. znaków ASCII (bajtów).Jeśli używasz innego klienta, możesz sprawdzić jego logi i spróbować znaleźć rozmiar wiersza żądania wysyłanego do Apigee Edge.
Logi procesora komunikatów
Aby sprawdzić, czy rozmiar nagłówków żądań przekroczył dozwolony limit 25 KB, użyj logów procesora komunikatów:
Jeśli jesteś użytkownikiem chmury prywatnej, możesz użyć logów procesora komunikatów, aby sprawdzić, czy rozmiar nagłówków żądań 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 występują błędy
431(jeśli problem wystąpił w przeszłości) lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu431. Możesz użyć tych ciągów wyszukiwania.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Znajdziesz wiersze z
system.logpodobne 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,600w powyższym komunikacie o błędzie wskazuje, że łączny rozmiar nagłówków żądań jest większy niż 25 KB. Dlatego Apigee Edge zgłasza wyjątekcom.apigee.errors.http.user.RequestHeadersTooLargei zwraca431kod stanu z kodem błęduprotocol.http.TooBigHeadersdo aplikacji klienckich.
Rozwiązanie
Napraw rozmiar
Opcja 1 [zalecana]: zmień aplikację kliencką, aby nie wysyłała nagłówków żądań o łącznym rozmiarze większym niż dozwolony limit
- Przeanalizuj przyczynę, dla której konkretny klient wysyła nagłówek żądania o dużym rozmiarze, co powoduje, że łączny rozmiar nagłówka przekracza dozwolony limit określony w sekcji Limity.
Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką, aby wysyłała nagłówki żądań o rozmiarze mniejszym niż dozwolony limit.
W omówionym powyżej przykładzie możesz rozwiązać problem, przekazując długie wartości nagłówka jako parametr w 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 jest to pożądane i chcesz wysłać nagłówek o rozmiarze większym niż dozwolony limit, przejdź do następnej 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ć nagłówków żądań/odpowiedzi o rozmiarach większych niż dozwolony limit zgodnie z dokumentacją dotyczącą limitu rozmiaru nagłówka żądania/odpowiedzi w sekcji Limity Apigee Edge.
- Jeśli jesteś użytkownikiem chmury publicznej, maksymalny limit rozmiaru nagłówków żądań i odpowiedzi jest zgodny z dokumentacją dotyczącą rozmiaru nagłówka żądania/odpowiedzi w sekcji Limity Apigee Edge.
- Jeśli jesteś użytkownikiem chmury prywatnej , możesz zmodyfikować 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ć, postępując zgodnie z instrukcjami w sekcji Jak sprawdzić bieżący limit.
Jak sprawdzić bieżący limit?
W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPRequest.headers.limit została
zaktualizowana o nową wartość w procesorach komunikatów.
- Na maszynie procesora komunikatów wyszukaj właściwość
HTTPRequest.headers.limitw katalogu/opt/apigee/edge-message-processor/confi sprawdź, jaka wartość została ustawiona, jak pokazano poniżej:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Przykładowy wynik powyższego polecenia:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
W powyższym przykładzie zwróć uwagę, że właściwość
HTTPRequest.headers.limitzostała ustawiona na wartość25kwhttp.properties.Oznacza to, że limit rozmiaru nagłówka żądania skonfigurowany w Apigee dla chmury prywatnej wynosi 25 KB.
Specyfikacja
Apigee Edge oczekuje, że aplikacja kliencka nie będzie wysyłać nagłówków o dużym rozmiarze w ramach
żądania. Jeśli żądanie zawiera nagłówki o łącznym rozmiarze większym niż określony limit,
Apigee zgłasza błąd 431 Request Header Fields Too Large zgodnie z tymi specyfikacjami RFC:
| Specyfikacja |
|---|
| RFC 6585, sekcja 5: 431 Request Header Fields Too Large |
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, zapoznaj się z sekcją 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łędu431 - Plik śledzenia żądań do interfejsu API
Jeśli jesteś użytkownikiem chmury prywatnej, 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łędu431 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