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.TooBigLine
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 line size exceeding 2,048", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
Possibili cause
Questo errore si verifica se la dimensione della riga di risposta inviata dal server di destinazione/backend ad Apigee Edge come parte della risposta HTTP è superiore al limite massimo consentito in Apigee Edge.
Prima di esaminare le possibili cause di questo errore, vediamo cosa significa la riga di risposta e come verificarne le dimensioni.
Informazioni sulla riga di risposta
Una tipica risposta HTTP è costituita da tre parti:
- Status-Line (indicato come Response-Line in Apigee)
- ( Insieme di intestazioni HTTP)
- [ Corpo ]
La riga di risposta è costituita da tre parti: versione del protocollo seguita da un codice di stato numerico e dalla frase testuale associata, come mostrato di seguito:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Quando viene inviata una risposta HTTP dall'applicazione server di destinazione/backend, la prima riga
inviata rappresenta la riga di risposta come descritto sopra. Seguono le intestazioni e il corpo/payload della risposta.Il seguente screenshot di esempio mostra una richiesta curl
tipica, le parti Richiesta e Risposta (insieme alla riga di risposta).
Informazioni sulle dimensioni della riga di risposta
Nell'esempio discusso sopra, la riga iniziale (prima riga) nella risposta, denominata anche Riga di risposta, è la seguente:
HTTP/1.1 200 OK
Questa riga di risposta ha una dimensione pari a
~15 bytes
poiché contiene15 ASCII characters
. Poiché rientra nel limite consentito in Apigee Edge, la risposta viene inviata al client senza errori da Apigee Edge.- Analogamente, se osservi il
faultstring
nel Messaggio di errore mostrato sopra, significa che contiene"response line size exceeding 2,048"
. Questo indica che la riga di risposta nella risposta HTTP inviata dal server di destinazione/backend ha superato i 2048 byte.
Informazioni sulla riga di risposta ampia
Secondo la definizione di Status-Line (qui qui indicata come Response-Line) e le tipiche richieste e risposta HTTP, la dimensione sarebbe molto inferiore al limite predefinito di 2 K in Apigee Edge, pertanto potremmo non raggiungere il limite. Tuttavia, ecco alcuni scenari possibili in cui potresti superare questo limite:
- Il server di destinazione/backend non è un sistema HTTP. Potrebbe rispondere con una risposta non HTTP.
- Il server di destinazione/backend ha problemi e invia una riga di risposta lunga come parte della risposta HTTP.
Per saperne di più, consulta la pagina Come ottenere il protocollo degli errori http.TooBigLine, "dimensione della riga di risposta superiore a 2048.
Di seguito sono riportate le possibili cause dell'errore:
Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
Le dimensioni della riga di risposta superano il limite consentito | La dimensione della riga di risposta inviata dal server di destinazione/backend come parte della risposta HTTP ad Apigee Edge è superiore al 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.TooBigLine
come mostrato di seguito:Vedrai le informazioni relative al codice di errore
protocol.http.TooBigLine
, 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.TooBigLine
.
- Codice di stato:
- Se l'Origine dell'errore ha il valore
target
e il Codice di errore ha il valoreprotocol.http.TooBigLine
, ciò indica che la risposta HTTP dal server di destinazione/ di backend ha una dimensione della linea di risposta superiore al limite massimo 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, troverai l'errore nella sezione Errore
flowinfo
subito dopo la fase Richiesta inviata al server di destinazione, come mostrato di seguito:Prendi nota dei valori dell'errore dalla traccia:
- errore:
response line exceeding 2,048
- error.class:
com.apigee.errors.http.server.BadGateway
Questo indica che Apigee Edge (componente Processore di messaggi) genera l'errore non appena riceve la risposta dal server di backend a causa di una dimensione della riga di risposta che supera il limite consentito.
- errore:
Visualizzerai il messaggio di errore inviato al client nella fase Risposta inviata al client, come mostrato di seguito:
- Prendi nota dei valori dell'errore della traccia:
- Errore:
502 Bad Gateway
. - Contenuto dell'errore:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Errore:
Puoi anche accedere alla fase AX (Analytics Data Recorded) nella traccia e fare clic per visualizzare i dettagli dell'errore.
( visualizza immagine ingrandita)
Prendi nota del valore dei seguenti valori:
Intestazioni delle richieste Valore X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Contenuti dell'errore : corpo {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
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
502
. 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
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non riuscire con502
. Se riscontri errori
502
con X-Apigee-fault-code corrispondenti al valore diprotocol.http.TooBigLine
, determina il valore di X-Apigee-fault-source.La voce di esempio precedente del 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.TooBigLine
X-Apigee-fault-source target
Causa: la dimensione della riga di risposta supera il limite consentito
Diagnostica
- Determina il codice di errore e l'origine dell'errore per l'errore osservato utilizzando API Monitoring, lo strumento Trace o i log degli accessi NGINX, come spiegato nella sezione Passaggi di diagnostica comuni.
- Se l'Origine dell'errore ha il valore
target
, significa che la dimensione della riga di risposta inviata dall'applicazione server di destinazione/backend ad Apigee è superiore al limite consentito in Apigee Edge. Puoi verificare che le dimensioni della riga di risposta abbiano superato il limite consentito di 2 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 a
faultstring
.Esempio di messaggio di errore:
"faultstring":"response line size exceeding 2,048"
Il valore
faultstring
riportato sopra indica che le dimensioni della riga di risposta hanno superato il limite consentito di 2 kB.Richiesta effettiva
Per eseguire la convalida utilizzando la richiesta effettiva:
Se hai accesso alla richiesta effettiva fatta all'applicazione server di destinazione/backend, segui questi passaggi:
- Verificare la dimensione della riga di risposta
- Se noti che le dimensioni dell'URI superano il limite consentito in Apigee Edge, allora è questa la causa del problema.
Esempio di risposta dal server di destinazione/backend:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
Nel caso precedente, la riga di risposta
HTTP/1.1 200 1111…<trimmed>...11111111
supera i 2 kB, ovvero contiene più di 2.000 caratteri ASCII.Se utilizzi un altro client, puoi esaminare i log del client e provare a scoprire la dimensione della linea di risposta che viene inviata ad Apigee Edge.
Log del processore di messaggi
Per eseguire la convalida utilizzando i log del processore di messaggi:
Se sei un utente Private Cloud, puoi utilizzare i log del processore di messaggi per verificare se la dimensione della riga di risposta ha superato il limite consentito in Apigee Edge.
- Determina l'ID messaggio della richiesta non riuscita utilizzando il monitoraggio delle API, lo strumento Trace o i log di accesso NGINX, come spiegato nella sezione Passaggi di diagnostica comuni.
Cerca l'ID messaggio nel log del processore di messaggi:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Troverai righe da
system.log
simili alle seguenti:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
Il testo
message = response line size exceeding 2,048
nel messaggio di errore riportato sopra indica che la dimensione della riga di risposta è superiore a 2 kB. Di conseguenza, Apigee Edge genera l'eccezione e restituisce un codice di stato502
con codice di erroreprotocol.http.TooBigline
alle applicazioni client.
Risoluzione
Correggi dimensione
Opzione 1 [consigliata]: correggi l'applicazione server di destinazione/backend in modo che non invii righe di risposta di dimensioni superiori al limite consentito
- Analizza il motivo per cui il client specifico invia una riga di risposta di dimensioni superiori al limite consentito come definito in Limiti.
- Se non è desiderabile, modifica l'applicazione server di destinazione/backend in modo che invii una riga di risposta di dimensioni inferiori al limite consentito.
- Se è opportuno e vuoi inviare una riga di risposta di dimensioni superiori al limite consentito, vai alle opzioni successive.
CwC
Opzione 2: utilizza la proprietà CwC per aumentare il limite della riga di risposta
Apigee fornisce una proprietà CwC che le consente di aumentare il limite di dimensioni della riga di risposta. Per maggiori dettagli, consulta Impostare il limite delle righe di risposta sul processore di messaggi.
Limiti
Apigee si aspetta che l'applicazione client e il server di backend non inviino righe di richiesta/risposta le cui dimensioni sono superiori al limite consentito come documentato per il limite delle righe di richiesta/risposta nei limiti di Apigee Edge.
- Se sei un utente del cloud pubblico, il limite massimo per le dimensioni delle linee di richiesta e risposta è come documentato per le dimensioni della riga di richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente Private Cloud , potresti aver modificato il limite massimo predefinito per le dimensioni delle richieste e delle righe di risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo delle dimensioni della riga 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.line.limit
sia stata aggiornata con un nuovo valore nei processori di messaggi.
- Nel computer del processore di messaggi, cerca la proprietà
HTTPResponse.line.limit
nella directory/opt/apigee/edge-message-processor/conf
e controlla quale valore sia stato impostato come mostrato di seguito:grep -ri "HTTPResponse.line.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.line.limit=2k
Nell'output di esempio riportato sopra, puoi notare che la proprietà
HTTPResponse.line.limit
è stata impostata con il valore2k
inhttp.properties
.Questo indica che il limite per le dimensioni della riga di risposta configurate in Apigee per il cloud privato è di 2 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'errore
502
- 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'errore502
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