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 502 Bad Gateway
con l'errore
codice protocol.http.ResponseWithBody
come risposta per le chiamate API.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 502 Bad Gateway
Potresti anche visualizzare uno dei seguenti messaggi di errore:
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
Possibili cause
Questo errore si verifica se la risposta HTTP dal server di backend ad Apigee Edge
204 No Content
o 205 Reset Content
ma contiene la risposta
corpo e/o una o più delle seguenti intestazioni:
Content-Length
Content-Encoding
Transfer-Encoding
In base alle specifiche
RFC 7231, sezione 6.3.5: 204 Nessun contenuto e
.
RFC 7231, sezione 6.3.6: 205 Reset Content, si prevede che nessun contenuto aggiuntivo
Deve essere inviato dal server di origine come parte del corpo del payload della risposta con il codice di stato 204 No
Content
o 205 Reset Content
. Le intestazioni della risposta
come Content-Length
, Content-Encoding
o
Transfer-Encoding
indicano la dimensione, il tipo o il formato del payload della risposta.
Pertanto, Apigee Edge restituisce un codice di stato 502 Bad Gateway
con
il codice di errore protocol.http.ResponseWithBody
al client nel seguente
circostanze:
Codice di stato dal server di backend | ||
---|---|---|
La risposta dal server di backend contiene | 204 Nessun contenuto | 205 Ripristino dei contenuti |
Corpo della risposta | ERRORE | ERRORE |
Intestazione (impostato su un valore diverso da zero) |
ERRORE | ERRORE |
(impostato su supportata in Apigee Edge) |
ERRORE | NESSUN ERRORE |
Transfer-Encoding |
ERRORE | ERRORE |
Ecco le possibili cause di questo errore:
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Corpo della risposta o intestazioni con risposta 204 dal server di backend | Il server di backend invia un messaggio 204 No Content o 205 Reset Content
risposta con un corpo della risposta e/o una o più intestazioni Content-Type ,
Content-Encoding o Transfer-Encoding . |
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.
- Traccia il codice di errore in base all'ora.
Seleziona una cella con il codice di errore
protocol.http.ResponseWithBody
come mostrato di seguito:Verranno visualizzate le informazioni sul codice di errore
protocol.http.ResponseWithBody
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.ResponseWithBody
.
- Codice di stato:
- Se Origine di errore presenta il valore
target
e l'errore Code ha il valoreprotocol.http.ResponseWithBody
, indica che l'errore si è verificato perché il server di backend ha inviato un Codice di stato204 No Content
o205 Reset Content
con il corpo della risposta e/o una delle intestazioni menzionate nel Sezione Possibili cause.
Strumento Trace
Per diagnosticare l'errore utilizzando lo strumento Trace:
- 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
Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:
- 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 l'errore è visualizzato in
flowinfo
Errore Dopo la fase Richiesta inviata al server di destinazione, come illustrato di seguito:Scenario 1
Scenario 1: il server di backend risponde con il codice di stato
204 No Content
contenente il corpo della risposta e/o una delle intestazioni elencate Possibili cause.Prendi nota dei seguenti valori della traccia:
- errore:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
Scenario 2
Scenario 2: il server di backend risponde con un codice di stato
204 No Content
contenente il corpo della risposta e/o uno dei elencate in Possibili cause.Prendi nota dei seguenti valori della traccia:
- errore:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- errore:
- Vai alla fase AX (Analytics Data Recorded) nella traccia. e fai clic su questa opzione.
Scorri verso il basso fino alla sezione Dettagli fase, Intestazioni degli errori e determinare i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:
- Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source.
are protocol.http.ResponseWithBody
etarget
rispettivamente. Indica che l'errore si è verificato perché il server di backend ha inviato un Codice di stato204 No Content
o205 Reset Content
con corpo della risposta e/o una delle intestazioni menzionate in Possibili cause.Errore Valore X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
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.
- Cerca per vedere se ci sono errori
502
con codice di erroreprotocol.http.ResponseWithBody
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 X-Apigee-fault-code corrispondente al valore diprotocol.http.ResponseWithBody
, 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- Codice di errore Apigee e origine-fault-X-Apigee:
Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source.
sono rispettivamente
protocol.http.ResponseWithBody
etarget
. Indica che l'errore si è verificato perché il server di backend ha inviato un Codice di stato204 No Content
o205 Reset Content
con corpo della risposta e/o una delle intestazioni menzionate in Possibili cause.
Causa: corpo della risposta o intestazioni con risposta 204 dal server di backend
Diagnosi
- Determinare il codice di errore e l'origine errore per l'errore osservato utilizzando l'API Log di accesso di Monitoring, dello strumento Trace o di NGINX, come spiegato in Passaggi comuni per la diagnosi.
- Se il codice di errore è
protocol.http.ResponseWithBody
e Origine errore ha il valoretarget
, questo indica che il backend server ha risposto con stato204 No Content
o205 Reset Content
codice con il corpo della risposta e/o una delle intestazioni menzionate Possibili cause. Per verificare se il server di backend ha effettivamente inviato un corpo del payload di risposta e/o uno o più intestazioni menzionate in Possibili cause, puoi segui questi passaggi:
Se sei un utente del cloud pubblico e puoi inviare la stessa richiesta API alla server di backend direttamente da uno qualsiasi dei tuoi sistemi.
- Se sei un utente del Private Cloud, puoi effettuare la stessa richiesta API alla di backend direttamente da uno dei processori di messaggi associati all'interfaccia dell'organizzazione e dell'ambiente in cui si osserva l'errore.
Esamina la risposta ricevuta dal server di backend e verifica che contenga un corpo del payload della risposta e/o una o più delle intestazioni sopra menzionate. Se sì, allora la causa di questo errore.
Esempio 1
Esempio 1: risposta 204 del server di backend con intestazione Content-Encoding
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveIn questo esempio, il server di backend ha risposto con Codice di stato di
204 No Content
eContent-Encoding: gzip
Esempio 2
Esempio 2: risposta 204 del server di backend con intestazione Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveIn questo esempio, il server di backend ha risposto con Codice di stato di
204 No Content
eContent-Length: 48
Esempio 3
Esempio 3: risposta 205 del server di backend con corpo della risposta
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
In questo esempio, il server di backend ha risposto con Codice di stato
205 Reset Content
con corpo della rispostaThis is a sample Response.
- In tutti gli esempi precedenti, il server di backend ha inviato
204 No Content
o Codice di stato205 Reset Content
con il corpo della risposta e/o una delle intestazioni menzionato in Possibili cause. - Di conseguenza, Apigee Edge ha inviato un codice di stato
502 Bad Gateway
con codice di erroreprotocol.http.ResponseWithBody
.
Risoluzione
Assicurati che il server di backend rispetti sempre la specifica
RFC 7231, sezione 6.3.6: 205 Reimposta contenuti, quando invii 204 No Content
o 205 Reset Content
ad Apigee Edge. Vale a dire che il server di backend
NON DEVE inviare quanto segue come parte di un 204 No Content
o
Risposta 205 Reset Content
:
- Corpo payload risposta
- E una qualsiasi delle seguenti intestazioni:
Content-Length
Content-Encoding
Transfer-Encoding
Specifica
Apigee Edge risponde con il codice di stato 502 Bad Gateway
e il codice di errore
protocol.http.ResponseWithBody
se il server di backend invia un
Risposta 204 No Content
o 205 Reset Content
ma
non rispetta le seguenti specifiche RFC:
Specifica |
---|
RFC 7231, sezione 6.3.5: 204 Nessun contenuto |
RFC 7231, sezione 6.3.6: 205 Reimposta contenuti |
Punti chiave da tenere presente
La soluzione consigliata è quella di correggere il server di backend per inviare 204 No Content
e 205 Reset Content
senza corpo della risposta e uno qualsiasi dei
- Content-Length
, Content-Encoding
e
Transfer-Encoding
e rispettare le specifiche
RFC 7231, sezione 6.3.5: 204 Nessun contenuto e
RFC 7231, sezione 6.3.6: 205 Reset Content.
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
Se sei un utente di Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome ambiente
- Bundle proxy API
- File di traccia per le richieste API
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