Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
L'applicazione client riceve un codice di stato HTTP 431 Request Header Fields Too
Large con il codice di errore protocol.http.TooBigHeaders come risposta alle chiamate API.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 431 Request Header Fields Too Large
Inoltre, potresti visualizzare il seguente messaggio di errore:
{
"fault":{
"faultstring":"request headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Possibili cause
Questo errore si verifica se la dimensione totale di tutte le intestazioni delle richieste inviate dall'applicazione client a Apigee Edge come parte della richiesta HTTP è maggiore del limite consentito in Apigee Edge come indicato nella sezione 5: 431 Request Header Fields Too Large della RFC 6585.
Di seguito sono riportate le possibili cause di questo errore:
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili per |
|---|---|---|
| Le dimensioni delle intestazioni delle richieste sono maggiori del limite consentito | La dimensione totale di tutte le intestazioni inviate dall'applicazione client come parte della richiesta HTTP a Apigee Edge è maggiore del limite consentito in Apigee Edge. | Utenti di Edge Public Cloud e Private Cloud |
Passaggi comuni per la diagnosi
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Monitoraggio delle API
Per diagnosticare l'errore utilizzando il monitoraggio delle API:
- Accedi all'interfaccia utente di Apigee Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai alla pagina Analizza > Monitoraggio delle API > Esamina.
- Seleziona l'intervallo di tempo specifico in cui hai osservato gli errori.
- Traccia il codice di errore rispetto al tempo.
- Seleziona una cella con il codice di errore
protocol.http.TooBigHeaderse codice di stato431, come mostrato di seguito:
Verranno visualizzate le informazioni sul codice di errore
protocol.http.TooBigHeaderscome mostrato di seguito:
Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita:
Nella finestra Log, prendi nota dei seguenti dettagli:
- Codice di stato:
431 - Origine dell'errore:
apigee - Codice di errore:
protocol.http.TooBigHeaders. - Lunghezza della richiesta(byte):
32150 (> 25 KB)
- Codice di stato:
- Se l'Origine dell'errore ha il valore
apigeeoMP, il Codice di errore ha il valoreprotocol.http.TooBigHeaderse la Lunghezza della richiesta è maggiore di 25 KB, significa che la dimensione totale di tutte le intestazioni delle richieste inviate dall'applicazione client come parte della richiesta HTTP è maggiore del limite consentito in Apigee.
Strumento Traccia
NGINX
Per diagnosticare l'errore utilizzando i log degli accessi NGINX:
- Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi NGINX per
determinare le informazioni chiave sugli errori HTTP
431. Controlla i log degli accessi NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.
- Cerca per verificare se si sono verificati errori
431durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con431. Se trovi errori
431con X-Apigee-fault-code corrispondente al valore diprotocol.http.TooBigHeaders, determina il valore di X-Apigee-fault-source.
La voce di esempio riportata sopra nel log degli accessi NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-source:
Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source MPPrendi nota della lunghezza della richiesta:
40159(40 KB è maggiore di 25 KB, il limite consentito per le intestazioni delle richieste in Apigee Edge)Nella voce di log di esempio riportata sopra, X-Apigee-fault-source ha il valore
apigeeoMP, X-Apigee-fault-code ha il valoreprotocol.http.TooBigHeaderse Lunghezza della richiesta è 40 KB, che è maggiore del limite consentito in Apigee, ovvero 25 KB. Ciò indica chiaramente che la dimensione totale di tutte le intestazioni delle richieste inviate dall'applicazione client come parte della richiesta HTTP ha superato il limite consentito di 25 KB in Apigee Edge.
Causa: le dimensioni delle intestazioni delle richieste sono maggiori del limite consentito
Diagnosi
- Determina il codice di errore, l'origine dell'errore e le dimensioni della lunghezza della richiesta per l' errore osservato utilizzando i log degli accessi NGINX o il monitoraggio delle API, come spiegato in Passaggi comuni per la diagnosi.
- Se Origine dell'errore ha il valore
apigeeoMP, Codice di errore ha il valoreprotocol.http.TooBigHeaders, e Lunghezza della richiesta è maggiore di 25 KB, significa che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono maggiori del limite consentito in Apigee Edge. - Puoi verificare che le dimensioni delle intestazioni delle richieste abbiano superato il limite consentito di 25 KB utilizzando uno dei
seguenti metodi:
Messaggio di errore
Per eseguire la convalida utilizzando il messaggio di errore:
Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, allora fai riferimento a
faultstring. Ilfaultstringindica che la dimensione totale delle intestazioni delle richieste ha superato il limite consentito di 25 KB.Messaggio di errore di esempio:
"faultstring":"request headers size exceeding 25,600"
Richiesta effettiva
Per eseguire la convalida utilizzando la richiesta effettiva:
Se hai accesso alla richiesta effettiva effettuata dall'applicazione client, segui questi passaggi:
- Verifica le dimensioni delle intestazioni passate nella richiesta.
Se riscontri che la dimensione totale delle intestazioni è maggiore del limite consentito in Apigee Edge, questa è la causa del problema.
Richiesta di esempio:
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>"
Nel caso riportato sopra, la dimensione totale delle intestazioni
header0,header1,header2, eheader3è maggiore di 25 KB, ovvero contiene più di 25.000 caratteri ASCII (byte).Se utilizzi un altro client, puoi esaminare i log del client e provare a scoprire le dimensioni della riga della richiesta inviata ad Apigee Edge.
Log del processore di messaggi
Per eseguire la convalida utilizzando i log del processore di messaggi:
Se sei un utente di Private Cloud, puoi utilizzare i log del processore di messaggi per verificare se le dimensioni delle intestazioni delle richieste hanno superato il limite consentito in Apigee Edge.
Controlla i log del processore di messaggi:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Cerca per verificare se si sono verificati errori
431durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con431. Puoi utilizzare le seguenti stringhe di ricerca.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Troverai righe da
system.logsimili alle seguenti: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)
Il testo
message = request headers size exceeding 25,600nel messaggio di errore riportato sopra indica che la dimensione totale delle intestazioni delle richieste è maggiore di 25 KB. Di conseguenza, Apigee Edge genera l'eccezionecom.apigee.errors.http.user.RequestHeadersTooLargee restituisce il codice di stato431con il codice di erroreprotocol.http.TooBigHeadersalle applicazioni client.
Risoluzione
Dimensioni fisse
Opzione 1 [consigliata]: correggi l'applicazione client in modo che non invii intestazioni delle richieste con una dimensione totale maggiore del limite consentito
- Analizza il motivo per cui il client specifico invia l'intestazione della richiesta con dimensioni elevate , il che fa sì che la dimensione totale dell'intestazione superi il limite consentito definito in Limiti.
Se non è auspicabile, modifica l'applicazione client in modo che invii intestazioni delle richieste di dimensioni inferiori al limite consentito.
Nell'esempio discusso sopra, puoi risolvere il problema passando il parametro dei valori delle intestazioni lunghe come parte del corpo/payload della richiesta:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- Se è auspicabile e vuoi inviare un'intestazione superiore al limite consentito, vai all' opzione successiva.
CwC
Opzione 2 : utilizza la proprietà CwC per aumentare il limite della riga della richiesta
Apigee fornisce una CwC proprietà che consente di aumentare il limite di dimensioni della riga della richiesta. Per maggiori dettagli, consulta Impostare il limite della riga della richiesta nel processore di messaggi
Limiti
Apigee si aspetta che l'applicazione client e il server di backend non inviino intestazioni di richieste/risposte le cui dimensioni sono maggiori del limite consentito, come documentato per il limite di dimensioni delle intestazioni di richieste/risposte in Limiti di Apigee Edge.
- Se sei un utente di Public Cloud, il limite massimo per le dimensioni delle intestazioni di richieste e risposte è quello documentato per Dimensioni delle intestazioni di richieste/risposte in Limiti di Apigee Edge.
- Se sei un utente di Private Cloud, potresti aver modificato il limite massimo predefinito per le dimensioni delle intestazioni di richieste e risposte (anche se non è una pratica consigliata). Puoi determinare il limite massimo di dimensioni delle intestazioni delle richieste seguendo le istruzioni riportate in Come controllare il limite attuale.
Come controllare il limite attuale?
Questa sezione spiega come verificare che la proprietà HTTPRequest.headers.limit sia stata aggiornata con un nuovo valore nei processori di messaggi.
- Nella macchina del processore di messaggi, cerca la proprietà
HTTPRequest.headers.limitnella/opt/apigee/edge-message-processor/confdirectory e controlla il valore impostato, come mostrato di seguito:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Il risultato di esempio del comando riportato sopra è il seguente:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
Nell'output di esempio riportato sopra, tieni presente che la proprietà
HTTPRequest.headers.limitè stata impostata con il valore25kinhttp.properties.Ciò indica che il limite per le dimensioni delle intestazioni delle richieste configurato in Apigee per Private Cloud è di 25 KB.
Specifica
Apigee Edge si aspetta che l'applicazione client non invii intestazioni di grandi dimensioni come parte della
richiesta. Se la richiesta contiene intestazioni con una dimensione totale superiore al limite specificato,
Apigee genera 431 Request Header Fields Too Large in base alle seguenti specifiche RFC
| Specifica |
|---|
| RFC 6585, sezione 5: 431 Request Header Fields Too Large |
Se hai ancora bisogno dell'assistenza del supporto Apigee, vai a Raccolta delle informazioni di diagnostica.
Raccolta delle informazioni di diagnostica
Raccogli le seguenti informazioni di diagnostica, quindi contatta il supporto Apigee Edge:
Se sei un utente di Public Cloud, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome del proxy API
- Comando
curlcompleto utilizzato per riprodurre l'errore431 - File di traccia per le richieste API
Se sei un utente di Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome organizzazione
- Nome ambiente
- Bundle del proxy API
- File di traccia per le richieste API non riuscite
- Comando
curlcompleto utilizzato per riprodurre l'errore431 Log degli accessi NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.
- Log di sistema del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.log