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 il codice di errore 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
Inoltre, potrebbe essere visualizzato 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 del server di backend ad Apigee Edge è 204 No Content
o 205 Reset Content
, ma contiene il corpo della risposta 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, dal server di origine non dovrebbero essere inviati contenuti aggiuntivi come parte del corpo del payload della risposta con 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.
Di conseguenza, Apigee Edge restituisce al client un codice di stato 502 Bad Gateway
con
il codice di errore protocol.http.ResponseWithBody
nelle seguenti
circostanze:
Codice di stato dal server di backend | ||
---|---|---|
La risposta del server di backend contiene | 204 Nessun contenuto | 205 Ripristina contenuti |
Corpo della risposta | ERRORE | ERRORE |
(impostato su un valore diverso da zero) |
ERRORE | ERRORE |
(impostata su codifica supportata in Apigee Edge) |
ERRORE | NESSUN ERRORE |
Transfer-Encoding |
ERRORE | ERRORE |
Di seguito sono riportate le possibili cause di questo errore:
Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
Corpo della risposta o intestazioni con risposta 204 dal server di backend | Il server di backend invia una risposta 204 No Content o 205 Reset Content
con un corpo della risposta e/o una o più intestazioni Content-Type ,
Content-Encoding o Transfer-Encoding . |
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.
- Traccia Codice di errore su Ora.
Seleziona una cella con il codice di errore
protocol.http.ResponseWithBody
come mostrato di seguito:Vedrai le informazioni relative al 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, prendi nota dei seguenti dettagli:
- Codice di stato:
502
- Origine errore:
target
- Codice di errore:
protocol.http.ResponseWithBody
.
- Codice di stato:
- Se l'Origine errore ha il valore
target
e il Codice di errore ha il valoreprotocol.http.ResponseWithBody
, significa 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 nella sezione Possibili cause.
Strumento Traccia
Per diagnosticare l'errore utilizzando lo strumento Trace:
- 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
Assicurati che l'opzione Mostra tutte le FlowInfos sia abilitata:
- 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:Scenario n. 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 in Possibili cause.Prendi nota dei valori di quanto segue dalla 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 il codice di stato
204 No Content
contenente il corpo della risposta e/o una delle intestazioni elencate in Possibili cause.Prendi nota dei valori di quanto segue dalla 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.
Scorri verso il basso fino alla sezione Dettagli fase, Intestazioni degli errori e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:
- Nota che i valori di X-Apigee-fault-code e X-Apigee-fault-source
are protocol.http.ResponseWithBody
etarget
rispettivamente. Questo 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 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 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.ResponseWithBody
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 corrispondente al valore diprotocol.http.ResponseWithBody
, 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 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.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
. Questo 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 in Possibili cause.
Causa: corpo della risposta o intestazioni con risposta 204 dal server di backend
Diagnostica
- Determina il codice di errore e l'origine dell'errore per l'errore osservato mediante l'utilizzo di API Monitoring, strumento Trace o log degli accessi NGINX, come spiegato nella sezione Passaggi comuni della diagnostica.
- Se il codice di errore è
protocol.http.ResponseWithBody
e Origine dell'errore ha il valoretarget
, significa che il server di backend ha risposto con un codice di stato204 No Content
o205 Reset Content
con il corpo della risposta e/o una delle intestazioni menzionate in Possibili cause. Per verificare se il server di backend ha effettivamente inviato il corpo di un payload della risposta e/o una o più delle intestazioni menzionate in Possibili cause, puoi eseguire i seguenti passaggi:
Se sei un utente del cloud pubblico e puoi effettuare la stessa richiesta API al server di backend direttamente da uno dei tuoi sistemi.
- Se sei un utente Private Cloud, puoi effettuare la stessa richiesta API al server di backend direttamente da uno dei processori di messaggi associati all'organizzazione e all'ambiente specifici in cui si verifica l'errore.
Esamina la risposta ricevuta dal server di backend e verifica che contenga il corpo del payload della risposta e/o una o più delle intestazioni citate in precedenza. Se sì, è questa la causa dell'errore.
Esempio 1
Esempio 1: risposta del server di backend 204 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 il codice di stato
204 No Content
eContent-Encoding: gzip
Esempio 2
Esempio 2: risposta del server di backend 204 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 il codice di stato
204 No Content
eContent-Length: 48
Esempio 3
Esempio 3: risposta del server di backend 205 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 un codice di stato
204 No Content
o205 Reset Content
con il corpo della risposta e/o una delle intestazioni menzionate 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 Reset Content, quando invii la risposta 204 No Content
o 205 Reset Content
ad Apigee Edge. In altre parole, il server di backend DEVE inviare quanto segue come parte di una risposta 204 No Content
o 205 Reset Content
:
- Corpo payload risposta
- Inoltre, una qualsiasi delle seguenti intestazioni:
Content-Length
Content-Encoding
Transfer-Encoding
Specifiche
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 una risposta 204 No Content
o 205 Reset Content
ma non ottempera alle seguenti specifiche RFC:
Specifiche |
---|
RFC 7231, sezione 6.3.5: 204 Nessun contenuto |
RFC 7231, sezione 6.3.6: 205 Reset Content |
Punti chiave da considerare
La soluzione consigliata è correggere il server di backend affinché invii il codice di stato 204 No Content
e 205 Reset Content
senza corpo della risposta e qualsiasi intestazione - Content-Length
, Content-Encoding
e Transfer-Encoding
e rispettare le specifiche
RFC 7231, sezione 6.3.5: 204 No Content e
RFC 7231, section 6.3.6: 205 Reset Content.
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
Se sei un utente Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome ambiente
- Bundle del proxy API
- File di traccia per le richieste API
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