Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 431 Request Header Fields Too
Large
con codice di errore protocol.http.TooBigHeaders
come risposta per le 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 ad Apigee Edge nell'ambito della richiesta HTTP supera il limite consentito in Apigee Edge secondo i campi delle intestazioni delle richieste RFC 6585, sezione 5: 431 troppo grandi.
Di seguito sono riportate le possibili cause di questo errore:
Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
Le dimensioni delle intestazioni delle richieste superano il limite consentito | La dimensione totale di tutte le intestazioni inviate dall'applicazione client nell'ambito della richiesta HTTP ad Apigee Edge superano il limite consentito in Apigee Edge. | Utenti di cloud pubblico e privato perimetrale |
Passaggi di diagnosi più comuni
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Monitoraggio delle API
Per diagnosticare l'errore utilizzando il monitoraggio delle API:
- Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai alla pagina Analizza > Monitoraggio API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
- Traccia Codice di errore su Ora.
- Seleziona una cella con il codice di errore
protocol.http.TooBigHeaders
e il codice di stato431
, come mostrato di seguito: Verranno visualizzate le informazioni relative al codice di errore
protocol.http.TooBigHeaders
come mostrato di seguito:Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita:
Nella finestra Log, tieni presente i seguenti dettagli:
- Codice di stato:
431
- Origine errore:
apigee
- Codice di errore:
protocol.http.TooBigHeaders
. - Lunghezza richiesta(byte):
32150 (> 25 KB)
- Codice di stato:
- Se l'Origine dell'errore ha il valore
apigee
oMP
, il Codice di errore ha il valoreprotocol.http.TooBigHeaders
e Lunghezza richiesta è superiore a 25 kB significa che le dimensioni totali di tutte le intestazioni delle richieste inviate dall'applicazione client nell'ambito della richiesta HTTP superano il limite consentito in Apigee.
Strumento Traccia
NGINX
Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave sugli errori HTTP
431
. Controlla i log degli accessi di NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.
- Cerca per vedere se si sono verificati errori
431
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non riuscire con431
. Se riscontri errori
431
con X-Apigee-fault-code corrispondenti al valore diprotocol.http.TooBigHeaders
, determina il valore di X-Apigee-fault-source.La voce di esempio sopra riportata dal log degli accessi di 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.TooBigHeaders
X-Apigee-fault-source MP
Tieni presente la lunghezza della richiesta:
40159
(40 kB è superiore a 25 kB, il limite consentito per le intestazioni delle richieste in Apigee Edge)Nella voce di log di esempio sopra riportata, X-Apigee-fault-source ha il valore
apigee
oMP
, X-Apigee-fault-code ha il valoreprotocol.http.TooBigHeaders
e Request Length è 40 kB, che è maggiore del limite consentito in Apigee - 25 kB. Questo indica chiaramente che le dimensioni totali di tutte le intestazioni delle richieste inviate dall'applicazione client nell'ambito di una richiesta HTTP hanno superato il limite consentito di 25 kB in Apigee Edge.
Causa: le dimensioni delle intestazioni delle richieste superano il limite consentito
Diagnostica
- Determina il codice di errore, l'origine del errore e la dimensione della lunghezza della richiesta per l'errore osservato mediante i log di API Monitoring o accesso NGINX, come spiegato nella sezione Passaggi comuni di diagnosi.
- Se l'Origine dell'errore ha il valore
apigee
oMP
, il Codice di errore ha il valoreprotocol.http.TooBigHeaders
e la Lunghezza richiesta è superiore a 25 kB, ciò indica che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono superiori al 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, fai riferimento all'
faultstring
.faultstring
indica che la dimensione totale delle intestazioni delle richieste ha superato il limite consentito di 25 kB.Esempio di messaggio di errore:
"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 la dimensione delle intestazioni passate nella richiesta.
Se la dimensione totale delle intestazioni supera il limite consentito in Apigee Edge, allora è 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 precedente, la dimensione totale delle intestazioni
header0
,header1
,header2
eheader3
è superiore a 25 kB, ovvero contiene più di 25 K caratteri ASCII (byte).Se utilizzi un altro client, puoi esaminare i log del client e provare a scoprire la dimensione della riga di 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 del cloud privato, 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 vedere se si sono verificati errori
431
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con431
. Puoi utilizzare le seguenti stringhe di ricerca.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Sono disponibili righe da
system.log
simili 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,600
nel messaggio di errore sopra riportato indica che le dimensioni totali delle intestazioni delle richieste sono superiori a 25 kB. Di conseguenza, Apigee Edge genera l'eccezionecom.apigee.errors.http.user.RequestHeadersTooLarge
e restituisce il codice di stato431
con codice di erroreprotocol.http.TooBigHeaders
alle applicazioni client.
Risoluzione
Correggi dimensione
Opzione 1 [consigliata]: correggi l'applicazione client in modo che non invii intestazioni delle richieste con dimensioni totali superiori al limite consentito
- Analizza il motivo per cui il client specifico invia un'intestazione della richiesta di grandi dimensioni in modo che le dimensioni totali dell'intestazione siano superiori al limite consentito come definito in Limiti.
Se non lo desideri, 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 dell'intestazione lunga come parte del corpo della richiesta/payload:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- Se è opportuno e vuoi inviare un'intestazione superiore al limite consentito, vai all'opzione successiva.
CwC
Opzione 2 : utilizza la proprietà CwC per aumentare il limite di righe della richiesta
Apigee fornisce una proprietà CwC che le consente di aumentare il limite di dimensione della riga della richiesta. Per maggiori dettagli, consulta Impostare il limite di righe di richiesta sul processore di messaggi
Limiti
Apigee si aspetta che l'applicazione client e il server di backend non inviino intestazioni di richiesta/risposta le cui dimensioni sono superiori al limite consentito come documentato per il limite di dimensioni delle intestazioni di richiesta/risposta nei limiti di Apigee Edge.
- Se sei un utente del cloud pubblico, il limite massimo per le dimensioni delle intestazioni delle richieste e delle risposte è come documentato per le dimensioni dell'intestazione della richiesta/risposta in Apigee Edge Limits.
- Se sei un utente Private Cloud , potresti aver modificato il limite massimo predefinito per le dimensioni delle intestazioni delle richieste e delle risposte, anche se non è una pratica consigliata. Puoi determinare il limite massimo delle dimensioni dell'intestazione della richiesta seguendo le istruzioni in Come verificare il limite attuale.
Come si controlla 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.
- Nel computer del processore di messaggi, cerca la proprietà
HTTPRequest.headers.limit
nella directory/opt/apigee/edge-message-processor/conf
e controlla quale valore sia stato 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 valore25k
inhttp.properties
.Questo indica che il limite per le dimensioni dell'intestazione della richiesta configurate in Apigee per il cloud privato è 25 kB.
Specifiche
Apigee Edge prevede che l'applicazione client non invii intestazioni di grandi dimensioni nell'ambito della richiesta. Se la richiesta contiene intestazioni con dimensioni totali superiori al limite specificato, Apigee restituisce 431 Request Header Fields Too Large
in base alle seguenti specifiche RFC:
Specifiche |
---|
RFC 6585, sezione 5: 431 Request Header Fields (Campi intestazione richiesta troppo grandi) |
Se hai ancora bisogno di aiuto dall'Assistenza Apigee, vai alla pagina Devi raccogliere informazioni diagnostiche.
Devi raccogliere dati diagnostici
Raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza Apigee Edge:
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome dell'organizzazione.
- Nome ambiente
- Nome proxy API
- Comando
curl
completo utilizzato per riprodurre l'errore431
- File di traccia per le richieste API
Se sei un utente Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome dell'organizzazione.
- Nome ambiente
- Bundle del proxy API
- File di traccia per le richieste API non riuscite
- Comando
curl
completo utilizzato per riprodurre l'errore431
Log degli accessi NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dove: 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