Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP di 502 Bad Gateway
con
codice di errore protocol.http.TooBigHeaders
come risposta per l'API
chiamate.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 502 Bad Gateway
Potresti inoltre 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 target/backend ad Apigee Edge come parte della risposta HTTP è maggiore del limite consentito limite consentito in Apigee Edge.
Ecco le possibili cause di questo errore:
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
La dimensione delle intestazioni della risposta supera il limite consentito | La dimensione di un'intestazione specifica o la somma delle dimensioni di tutte le intestazioni inviate dal server di destinazione/backend come parte della risposta HTTP ad Apigee Edge è superiore al limite consentito in Apigee Edge. | Utenti perimetrali di cloud pubblici e privati |
Passaggi diagnostici comuni
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Monitoraggio delle API
Per diagnosticare l'errore utilizzando API Monitoring:
- Accedi alla UI di Apigee Edge come utente con ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai al menu Analizza > Monitoraggio delle API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
- Puoi selezionare il filtro Proxy per restringere il codice di errore.
- Traccia il codice di errore in base all'ora.
Seleziona una cella con il codice di errore
protocol.http.TooBigHeaders
come mostrato di seguito:Verranno visualizzate le informazioni sul 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:
502
- Origine errore:
target
- Codice di errore:
protocol.http.TooBigHeaders
.
- Codice di stato:
- Se Origine di errore presenta il valore
target
e l'errore Code ha il valoreprotocol.http.TooBigHeaders
, questo indica che la risposta HTTP del server di destinazione o di backend presenta intestazioni di dimensioni maggiori rispetto al limite consentito in Apigee Edge.
Strumento Trace
- Attiva 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.
- Navigare attraverso le diverse fasi della traccia e individuare il punto in cui si è verificato l'errore si è verificato un errore.
In genere, viene visualizzato questo errore nel flusso denominato Error (Errore) subito dopo il tag Fase Richiesta inviata al server di destinazione, come mostrato di seguito:
( visualizza immagine ingrandita)
Prendi nota dei valori dell'errore della traccia:
- errore:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Questo indica che Apigee Edge (componente Processore di messaggi) genera l'errore come non appena riceve la risposta dal server di backend a causa delle dimensioni dell'intestazione superando il limite consentito.
- errore:
l'errore verrà visualizzato nel campo Risposta inviata al cliente risposta di errore 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
. - Contenuti relativi all'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 di quanto segue:
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 di accesso NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per
per determinare le informazioni chiave su HTTP
502 Bad Gateway
. Controlla i log di accesso NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dove: ORG, ENV e PORT# sono sostituiti con valori effettivi.
- Controlla se sono presenti
502
errori con il codice di erroreprotocol.http.TooBigHeaders
per un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che non vanno a buon fine502
. Se riscontri errori
502
con il codice X-Apigee-fault-code corrispondente al valore diprotocol.http.TooBigHeaders
, quindi determina il valore della X-Apigee-fault-source.Esempio di errore 502 nel log di accesso NGINX:
La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-code
Intestazioni degli errori Valore X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Causa: la dimensione delle intestazioni della risposta è maggiore del limite consentito
Diagnosi
- Stabilisci il codice di errore, l'origine errore e la dimensione payload di risposta per il parametro osservato utilizzando i log di monitoraggio delle API, dello strumento Trace o di accesso NGINX, come spiegato in Passaggi comuni per la diagnosi.
- Se Origine errore ha il valore
target
, significa che la risposta inviata dal server di destinazione/backend ad Apigee ha intestazioni la cui dimensione è maggiore rispetto al limite consentito in Apigee Edge. - Puoi verificare che la risposta dal target/backend abbia intestazioni di dimensione
superiore 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, consulta il
faultstring
.faultstring
indica che la dimensione dell'intestazione della risposta ha superato il limite consentito.Esempio di messaggio di errore:
"faultstring":"response headers size exceeding 25,600"
Nel messaggio di errore riportato sopra, tieni presente nel
faultstring
che il 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 un cloud pubblico/un cloud privato, effettua una richiesta direttamente al server di backend dallo stesso server di backend o da qualsiasi macchina da cui è consentito effettuare la richiesta al backend server web.
- Se sei un utente del Private Cloud, puoi anche inviare la richiesta a il server di backend da uno dei processori di messaggi.
- Esamina la risposta ricevuta dal server di backend e, in particolare, calcolare e verificare la dimensione totale delle intestazioni passate nella risposta.
Se noti che la dimensione delle intestazioni nel payload di risposta è superiore al limite consentito in Apigee Edge, 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
e Le dimensioni diTestheader2
sono superiori, motivo per cui per questo errore in quanto 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 la dimensione delle intestazioni della risposta ha superato limite consentito in Apigee Edge.
Controlla i log del processore di messaggi:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Cerca se ci sono errori
502
durante un intervallo specifico durata (se il problema si è verificato in passato) o se sono presenti richieste non funziona ancora con502
. Puoi utilizzare la seguente stringa di ricerca:grep -ri "response headers size exceeding"
- Troverai linee da
system.log
simili alla seguente. La dimensione delle intestazioni delle risposte può variare a seconda del 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 backend/destinazione server web e rileva che la dimensione totale delle intestazioni è superiore a 25 kB, si interrompe e genera l'errore:
response headers size exceeding 25,600
Ciò implica che la dimensione totale intestazione è superiore a 25 kB e Apigee genera l'errore quando le dimensioni iniziano a superare il limite di 25 kB con il codice di errore come
protocol.http.TooBigHeaders
Risoluzione
Correggi dimensioni
Opzione 1 [consigliata]: correggi l'applicazione server di destinazione per non inviare le dimensioni delle intestazioni oltre il limite di Apigee
- Analizza il motivo per cui il server di destinazione specifico deve inviare più dimensioni dell'intestazione della risposta rispetto al limite consentito come definito in Limiti.
- Se non è appropriato, modifica l'applicazione del server di backend in modo che invii le intestazioni della risposta le cui dimensioni sono inferiori al limite consentito 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 pensavi di inviare come parte l'intestazione nel corpo della risposta. In questo modo avrai la certezza di non superare il numero di risposte massimo delle intestazioni.
CwC
Opzione 2 : utilizza la proprietà CwC per aumentare il limite di dimensioni dell'intestazione della risposta
Apigee offre una CwC, che consente di aumentare il limite di dimensioni delle intestazioni di risposta. Per maggiori dettagli, vedi Configurazione dei limiti per il processore di messaggi
Limiti
Apigee si aspetta che l'applicazione client e il server di backend non inviino dimensioni dell'intestazione superiori al limite consentito come documentato per le dimensioni dell'intestazione della richiesta/risposta Limiti di Apigee Edge.
- Se sei un utente del cloud pubblico, il limite massimo per Le dimensioni delle intestazioni delle richieste e delle risposte sono quelle documentate per le dimensioni dell'intestazione richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente Private Cloud , potresti aver modificato il valore massimo predefinito limite per le dimensioni delle intestazioni di richiesta e risposta (anche se non è una pratica consigliata). Per determinare il limite massimo di dimensioni dell'intestazione della risposta, segui le istruzioni riportate in Come controllare il limite attuale.
Come si controlla il limite attuale?
Questa sezione spiega come verificare che la proprietà HTTPResponse.headers.limit
abbia
è stato aggiornato con un nuovo valore
per i processori di messaggi.
- Cerca la proprietà sul computer
HTTPResponse.headers.limit
in nella directory/opt/apigee/edge-message-processor/conf
e controlla in vedi quale valore è stato impostato come mostrato di seguito:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Il risultato di esempio dal comando precedente è 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
è stato impostato con il valore25k
inhttp.properties
.Questo indica che il limite per la dimensione del payload della risposta configurato in Apigee per i servizi privati Cloud è di 25 kB.
Se hai ancora bisogno di aiuto dall'assistenza Apigee, vai a Devi raccogliere dati diagnostici.
Raccogliere dati diagnostici
Raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome proxy API
- Completa il comando
curl
utilizzato per riprodurre l'errore502
- File di traccia per le richieste API
- Output completo della risposta dal server di destinazione/backend insieme alla dimensione delle intestazioni
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 proxy API
- File di traccia per le richieste API non riuscite
- Completa il comando
curl
utilizzato per riprodurre l'errore502
- Output completo della risposta dal server di destinazione/backend insieme alla dimensione delle intestazioni
Log di accesso NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dove: ORG, ENV e PORT# vengono sostituiti con valori effettivi.
- Log di sistema del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.log