Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 502 Bad Gateway
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 502 Bad Gateway
Inoltre, potresti visualizzare il seguente messaggio di errore:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Possibili cause
Questo errore si verifica se la dimensione totale delle intestazioni inviate dal server di destinazione/backend ad Apigee Edge come parte della risposta HTTP supera il limite consentito in Apigee Edge.
Di seguito sono riportate le possibili cause di questo errore:
Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
La dimensione delle intestazioni nella risposta supera il limite consentito | La dimensione dell'intestazione di una determinata intestazione o la somma delle dimensioni di tutte le intestazioni inviate dal server di destinazione/backend come parte della risposta 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.
- Puoi selezionare il filtro Proxy per restringere il codice di errore.
- Traccia Codice di errore su Ora.
Seleziona una cella con il codice di errore
protocol.http.TooBigHeaders
come mostrato di seguito:Vedrai 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, prendi nota dei seguenti dettagli:
- Codice di stato:
502
- Origine errore:
target
- Codice di errore:
protocol.http.TooBigHeaders
.
- Codice di stato:
- Se l'Origine dell'errore ha il valore
target
e il Codice di errore ha il valoreprotocol.http.TooBigHeaders
, ciò indica che la risposta HTTP del server di destinazione/ di backend ha intestazioni le cui dimensioni sono superiori al limite consentito in Apigee Edge.
Strumento Traccia
- Abilita la sessione di traccia
e:
- Attendi che si verifichi l'errore
502 Bad Gateway
oppure - Se riesci a riprodurre il problema, effettua la chiamata API e riproduci l'errore
502 Bad Gateway
.
- Attendi che si verifichi l'errore
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, questo errore viene visualizzato nel flusso denominato Errore subito dopo la fase Richiesta inviata al server di destinazione, come mostrato di seguito:
( visualizza immagine ingrandita)
Prendi nota dei valori dell'errore dalla traccia:
- errore:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Questo indica che Apigee Edge (componente Message Processor) genera l'errore non appena riceve la risposta dal server di backend a causa di una dimensione dell'intestazione che supera il limite consentito.
- errore:
Visualizzerai l'errore nella risposta di errore Response sent to client (Risposta inviata al client) inviata da Apigee Edge, come mostrato di seguito:
- Prendi nota dei valori dell'errore della traccia. La traccia di esempio riportata sopra mostra:
- Errore:
502 Bad Gateway
. - Contenuto dell'errore:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Errore:
Vai alla fase AX (Analytics Data Recorded) nella traccia e fai clic per visualizzare i dettagli correlati.
( visualizza immagine ingrandita)
Prendi nota del valore dei seguenti valori:
Intestazioni degli errori Valore X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Contenuti dell'errore: corpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
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 su HTTP
502 Bad Gateway
. 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
502
con il codice di erroreprotocol.http.TooBigHeaders
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con502
. Se riscontri errori
502
con X-Apigee-fault-code corrispondenti al valore diprotocol.http.TooBigHeaders
, determina il valore di X-Apigee-fault-source.Esempio di errore 502 dal log degli accessi di NGINX:
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 degli errori Valore X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Causa: le dimensioni delle intestazioni nella risposta superano il limite consentito
Diagnostica
- Determina il codice di errore, l'origine dell'errore e la dimensione payload della risposta per l'errore osservato utilizzando i log di monitoraggio dell'API, strumento Trace o accesso NGINX, come spiegato nella sezione Passaggi di diagnostica comuni.
- Se l'Origine dell'errore ha il valore
target
, significa che la risposta inviata dal server di destinazione/backend ad Apigee ha intestazioni la cui dimensione è superiore al limite consentito in Apigee Edge. - Puoi verificare che la risposta dal target/backend abbia intestazioni le cui dimensioni sono superiori al limite consentito 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 le dimensioni dell'intestazione della risposta hanno superato il limite consentito.Esempio di messaggio di errore:
"faultstring":"response headers size exceeding 25,600"
Nel messaggio di errore riportato sopra, nota in
faultstring
che la risposta contiene intestazioni le cui dimensioni totali superano il limite consentito.Richiesta effettiva
Per eseguire la convalida utilizzando la richiesta effettiva:
Se hai accesso alla richiesta effettiva fatta al server di destinazione/backend, segui questi passaggi:
- Se sei un utente di cloud pubblico/private cloud, effettua una richiesta direttamente al server di backend dal server di backend stesso o da qualsiasi altra macchina da cui hai l'autorizzazione per effettuare la richiesta al server di backend.
- Se sei un utente Private Cloud, puoi anche effettuare la richiesta al server di backend da uno dei processori di messaggi.
- Esamina la risposta ricevuta dal server di backend, in particolare calcola e verifica la dimensione totale delle intestazioni trasmesse nella risposta.
Se noti che la dimensione delle intestazioni nel payload della risposta supera il limite consentito in Apigee Edge, allora questa è la causa del problema.
Esempio di risposta dal server di destinazione:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactNell'esempio precedente,
Testheader1
eTestheader2
hanno dimensioni più elevate e questo è la causa di questo errore poiché supera il limite consentito in 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 risposte 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
502
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con502
. Puoi utilizzare la seguente stringa di ricerca:grep -ri "response headers size exceeding"
- Troverai righe di
system.log
simili alle seguenti. Le dimensioni delle intestazioni delle risposte possono variare nel tuo caso:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
Non appena il processore di messaggi riceve la risposta dal server di backend/destinazione e rileva che la dimensione totale delle intestazioni è superiore a 25 kB, si interrompe e visualizza l'errore:
response headers size exceeding 25,600
Ciò implica che le dimensioni totali delle intestazioni sono superiori a 25 kB e Apigee genera l'errore quando la dimensione inizia a superare il limite di 25 kB con codice di errore
protocol.http.TooBigHeaders
Risoluzione
Correggi dimensione
Opzione 1 [consigliata]: correggi l'applicazione server di destinazione in modo che non invii intestazioni di dimensione superiore al limite di Apigee
- Analizza il motivo per cui il server di destinazione specifico invia una dimensione dell'intestazione della risposta superiore al limite consentito come definito in Limiti.
- Se non è opportuno, modifica l'applicazione del server di backend in modo che invii le intestazioni della risposta le cui dimensioni sono inferiori al limite consentito in Apigee Edge.
- Verifica se le informazioni dell'intestazione possono essere inviate come parte del corpo della risposta.
- Se possibile, invia tutte le informazioni di grandi dimensioni che volevi inviare come parte dell'intestazione nel corpo della risposta. Ciò garantirà di non superare il limite di intestazione della risposta.
CwC
Opzione 2 : utilizza la proprietà CwC per aumentare il limite di dimensione dell'intestazione della risposta
Apigee fornisce una proprietà CwC che le consente di aumentare il limite di dimensioni delle intestazioni delle risposte. Per maggiori dettagli, consulta Configurare i limiti per il processore di messaggi
Limiti
Apigee si aspetta che l'applicazione client e il server di backend non inviino dimensioni delle intestazioni superiori al limite consentito come documentato per le dimensioni dell'intestazione della richiesta/risposta in Apigee Edge Limits.
- 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 Limiti di Apigee Edge.
- Se sei un utente Private Cloud , potresti aver modificato il limite massimo predefinito per le dimensioni delle intestazioni Richieste e Risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo delle dimensioni dell'intestazione di risposta seguendo le istruzioni in Come verificare il limite attuale.
Come si controlla il limite attuale?
Questa sezione spiega come verificare che la proprietà HTTPResponse.headers.limit
sia stata aggiornata con un nuovo valore nei processori di messaggi.
- Nel computer del processore di messaggi, cerca la proprietà
HTTPResponse.headers.limit
nella directory/opt/apigee/edge-message-processor/conf
e controlla quale valore sia stato impostato come mostrato di seguito:grep -ri "HTTPResponse.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:HTTPResponse.headers.limit=25k
Nell'output di esempio riportato sopra, tieni presente che la proprietà
HTTPResponse.headers.limit
è stata impostata con il valore25k
inhttp.properties
.Questo indica che il limite per la dimensione del payload della risposta configurata in Apigee per il cloud privato è di 25 kB.
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'errore502
- File di traccia per le richieste API
- Output completo della risposta dal server di destinazione/backend insieme alle dimensioni delle intestazioni
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'errore502
- Output completo della risposta dal server di destinazione/backend insieme alle dimensioni delle intestazioni
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