Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
L'applicazione client riceve un codice di stato HTTP 502 Bad Gateway con il codice di errore
protocol.http.TooBigLine come risposta alle 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 le dimensioni della riga di risposta inviata dal server di destinazione/backend ad Apigee Edge come parte della risposta HTTP sono maggiori del limite massimo consentito in Apigee Edge.
Prima di esaminare le possibili cause di questo errore, cerchiamo di capire cosa significa la riga di risposta e come verificarne le dimensioni.
Informazioni sulla riga di risposta
Una risposta HTTP tipica è composta da tre parti:
- Riga di stato (denominata riga di risposta in Apigee)
- ( Set di intestazioni HTTP )
- [ Corpo ]
La riga di risposta è composta da tre parti: versione del protocollo seguita da un codice di stato numerico e dalla relativa frase testuale , come mostrato di seguito:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Quando un'applicazione server di destinazione/backend invia una risposta HTTP, la prima riga che è
inviata rappresenta la riga di risposta come descritto sopra. Seguono le
intestazioni e il corpo/payload della risposta.Lo screenshot di esempio seguente mostra una tipica
richiesta curl, la parte Richiesta e la parte Risposta (insieme alla
riga di risposta).
Informazioni sulle dimensioni della riga di risposta
Nell'esempio discusso sopra, la riga start (prima riga) nella risposta, denominata anche riga di risposta , è la seguente:
HTTP/1.1 200 OK
Questa riga di risposta ha una dimensione di
~15 bytesperché contiene15 ASCII characters. Poiché rientra nel limite consentito in Apigee Edge, la risposta viene inviata al client senza errori da Apigee Edge.- Allo stesso modo, se esamini il
faultstringnel messaggio di errore mostrato sopra, contiene"response line size exceeding 2,048". Ciò 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 di grandi dimensioni
In base alla definizione di riga di stato (denominata riga di risposta qui) e alle richieste e risposte HTTP tipiche, le dimensioni sarebbero molto inferiori al limite predefinito di 2 K in Apigee Edge, quindi potremmo non raggiungere il limite. Tuttavia, ecco alcuni possibili scenari in cui potresti superare questo limite:
- Il server di destinazione/backend non è un sistema HTTP. Potrebbe rispondere con una risposta non HTTP response.
- Il server di destinazione/backend presenta problemi e invia una riga di risposta lunga come parte della risposta HTTP risposta.
Scopri di più in Ricevere l'errore protocol.http.TooBigLine, "response line size exceeding 2,048.
Di seguito sono riportate le possibili cause dell'errore:
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili per |
|---|---|---|
| Le dimensioni della riga di risposta sono maggiori del limite consentito | Le dimensioni della riga di risposta inviata dal server di destinazione/backend come parte della risposta HTTP ad Apigee Edge sono maggiori del limite consentito in Apigee Edge | Utenti di Edge Public 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 API > Esamina.
- Seleziona l'intervallo di tempo specifico in cui hai osservato gli errori.
- Puoi selezionare il filtro Proxy per restringere il codice di errore.
- Traccia Codice di errore rispetto a Ora.
Seleziona una cella con il codice di errore
protocol.http.TooBigLinecome mostrato di seguito:( visualizza immagine più grande)
Verranno visualizzate le informazioni sul codice di errore
protocol.http.TooBigLinecome mostrato di seguito:( visualizza immagine più grande)
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 Origine errore ha il valore
targete Codice di errore ha il valoreprotocol.http.TooBigLine, significa che la risposta HTTP del server di destinazione/ backend ha una dimensione della riga di risposta maggiore del limite massimo consentito in Apigee Edge.
Strumento Traccia
- Attiva la sessione di traccia
e:
- Attendi che si verifichi l'errore
502 Bad Gateway. o - 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.
- Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, l'errore si trova in
flowinfoErrore subito dopo la fase Richiesta inviata al server di destinazione , come mostrato di seguito:
Prendi nota dei valori dell'errore dalla traccia:
- error:
response line exceeding 2,048 - error.class:
com.apigee.errors.http.server.BadGateway
Ciò indica che Apigee Edge (componente del 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.
- error:
Il messaggio di errore inviato al client viene visualizzato nella fase Risposta inviata al client , come mostrato di seguito:
( visualizza immagine più grande)
- Prendi nota dei valori dell'errore dalla traccia:
- Errore:
502 Bad Gateway. - Contenuto errore:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Errore:
Puoi anche andare alla fase AX (Dati di analisi registrati) nella traccia e fare clic su di essa per visualizzare i dettagli dell'errore.
( visualizza immagine più grande)
Prendi nota del valore di quanto segue:
Intestazioni delle richieste Valore X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetContenuto 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 NGINX:
- Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi NGINX per
determinare le informazioni chiave sugli errori HTTP
502. 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 se sono presenti errori
502durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con502. Se trovi errori
502con X-Apigee-fault-code corrispondente al valore diprotocol.http.TooBigLine, 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.TooBigLineX-Apigee-fault-source target
Causa: le dimensioni della riga di risposta sono maggiori del limite consentito
Diagnosi
- Determina il codice di errore e l'origine errore per l'errore osservato utilizzando il monitoraggio delle API lo strumento Traccia o i log degli accessi NGINX, come spiegato in Passaggi comuni per la diagnosi.
- Se Origine errore ha il valore
target, significa che le dimensioni della riga di risposta inviata dall'applicazione server di destinazione/backend ad Apigee sono maggiori del 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, consulta il
faultstring.Messaggio di errore di esempio:
"faultstring":"response line size exceeding 2,048"
La
faultstringriportata 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 effettuata all'applicazione server di destinazione/backend segui questi passaggi:
- Verifica le dimensioni della riga di risposta
- Se le dimensioni dell'URI superano il
limite consentito in Apigee Edge, questa è la causa del
problema.
Risposta di esempio 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è maggiore di 2 KB, ovvero contiene più di 2 K caratteri ASCII.Se utilizzi un altro client, puoi esaminare i log del client e provare a scoprire le dimensioni della riga di risposta 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 della riga di risposta hanno superato il limite consentito in Apigee Edge.
- Determina l'ID messaggio della richiesta non riuscita utilizzando il monitoraggio delle API, lo strumento Traccia o i log degli accessi NGINX, come spiegato in Passaggi comuni per la diagnosi.
Cerca l'ID messaggio nel log del processore di messaggi:
/opt/apigee/var/log/edge-message-processor/logs/system.logTroverai righe da
system.logsimili 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,048nel messaggio di errore riportato sopra indica che le dimensioni della riga di risposta sono maggiori di 2 KB. Di conseguenza, Apigee Edge genera l'eccezione e restituisce un codice di stato502con codice di erroreprotocol.http.TooBiglinealle applicazioni client.
Risoluzione
Correggi le dimensioni
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 è auspicabile, modifica l'applicazione server di destinazione/backend in modo che invii una riga di risposta di dimensioni inferiori al limite consentito.
- Se è auspicabile 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 consente di aumentare il limite delle dimensioni della riga di risposta. Per maggiori dettagli, vedi Impostare il limite della riga di risposta nel 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 superino il limite consentito, come documentato per Limite della riga di richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente di Public Cloud, il limite massimo per le dimensioni della riga di richiesta e risposta è documentato per Dimensioni della riga di richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente di Private Cloud, potresti aver modificato il limite massimo predefinito per le dimensioni della riga di richiesta e risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo delle dimensioni della riga di risposta seguendo le istruzioni riportate in Come controllare il limite attuale.
Come controllare 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.
- Nella macchina del processore di messaggi, cerca la proprietà
HTTPResponse.line.limitnella directory/opt/apigee/edge-message-processor/confe controlla il valore 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, nota che la proprietà
HTTPResponse.line.limitè stata impostata con il valore2kinhttp.properties.Ciò indica che il limite per le dimensioni della riga di risposta configurato in Apigee per Private Cloud è 2 KB.
Se hai ancora bisogno dell'assistenza del supporto Apigee, vai a Raccogliere le informazioni di diagnostica necessarie.
Raccogliere le informazioni di diagnostica necessarie
Raccogli le seguenti informazioni di diagnostica e poi contatta il supporto Apigee Edge:
Se sei un utente di Public Cloud, fornisci le seguenti informazioni:
- Nome 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 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'errore502 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