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.ResponseWithBody 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 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-LengthContent-EncodingTransfer-Encoding
In base alle specifiche
RFC 7231, sezione 6.3.5: 204 No Content e
RFC 7231, sezione 6.3.6: 205 Reset Content, è previsto che il server di origine non invii 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 le dimensioni, 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 nelle seguenti circostanze:
| Codice di stato del server di backend | ||
|---|---|---|
| La risposta del server di backend contiene | 204 Nessun contenuto | 205 Reimposta contenuto |
| Corpo della risposta | ERRORE | ERRORE |
Intestazione (impostata su un valore diverso da zero) |
ERRORE | ERRORE |
(impostata su codifica supportata in Apigee Edge) |
ERRORE | NESSUN ERRORE |
Transfer-Encoding |
ERRORE | ERRORE |
Ecco 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 204 No Content o 205 Reset Content
risposta con un corpo della risposta e/o una o più delle intestazioni Content-Type,
Content-Encoding o Transfer-Encoding. |
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.
- Traccia Codice di errore rispetto a Ora.
Seleziona una cella con il codice di errore
protocol.http.ResponseWithBodycome mostrato di seguito:( visualizza immagine più grande)
Verranno visualizzate le informazioni sul codice di errore
protocol.http.ResponseWithBodycome mostrato di seguito:( visualizza immagine più grande)
Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.
( visualizza immagine più grande)
- 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 Origine errore ha il valore
targete 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 Contento205 Reset Contentcon il corpo della risposta e/o una delle intestazioni menzionate nella sezione Possibili cause.
Strumento Traccia
Per diagnosticare l'errore utilizzando lo 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
Assicurati che l'opzione Mostra tutte le informazioni sul flusso sia attivata:
- 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:Scenario 1
Scenario 1: il server di backend risponde con il codice di stato
204 No Contentcontenente il corpo della risposta e/o una delle intestazioni elencate in Possibili cause.
Prendi nota dei seguenti valori dalla traccia:
- error:
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 Contentcontenente il corpo della risposta e/o una delle intestazioni elencate in Possibili cause.
Prendi nota dei seguenti valori dalla traccia:
- error:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- error:
- Vai alla fase AX (Dati di analisi registrati) nella traccia e fai clic su di essa.
Scorri verso il basso fino alla sezione Dettagli fase, Intestazioni errore e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:
( visualizza immagine più grande)
- Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source
are protocol.http.ResponseWithBodyetargetrispettivamente. Ciò indica che l'errore si è verificato perché il server di backend ha inviato un codice di stato204 No Contento205 Reset Contentcon il corpo della risposta e/o una delle intestazioni menzionate in Possibili cause.Errore Valore X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target
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 su HTTP
502 Bad Gateway. 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
502con il codice di erroreprotocol.http.ResponseWithBodydurante 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.ResponseWithBody, determina il valore di X-Apigee-fault-source.Esempio di errore 502 dal log degli accessi NGINX:
La voce di esempio riportata sopra 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.ResponseWithBodyX-Apigee-fault-source target- Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source
sono
protocol.http.ResponseWithBodyetargetrispettivamente. Ciò indica che l'errore si è verificato perché il server di backend ha inviato un codice di stato204 No Contento205 Reset Contentcon 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
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 il Codice di errore è
protocol.http.ResponseWithBodye Origine errore ha il valoretarget, significa che il server di backend ha risposto con un codice di stato204 No Contento205 Reset Contentcon il corpo della risposta e/o una delle intestazioni menzionate in Possibili cause. Per verificare se il server di backend ha effettivamente inviato un corpo del payload della risposta e/o uno o più delle intestazioni menzionate in Possibili cause, puoi seguire questi passaggi:
Se sei un utente di Public Cloud e puoi effettuare la stessa richiesta API al server di backend direttamente da uno dei tuoi sistemi.
- Se sei un utente di 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 è verificato 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 menzionate sopra. In caso affermativo, 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
204 No Contentcodice di stato eContent-Encoding: gzipEsempio 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
204 No Contentcodice di stato eContent-Length: 48Esempio 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 ResponseIn questo esempio, il server di backend ha risposto con
205 Reset Contentcodice di stato con corpo della rispostaThis is a sample Response.- In tutti gli esempi precedenti, il server di backend ha inviato
204 No Contento205 Reset Contentcodice di stato con il corpo della risposta e/o una delle intestazioni menzionate in Possibili cause. - Pertanto, Apigee Edge ha inviato
502 Bad Gatewaycodice di stato con codice di erroreprotocol.http.ResponseWithBody.
Risoluzione
Assicurati che il server di backend rispetti sempre le specifiche
RFC 7231, sezione 6.3.6: 205 Reset Content, quando invia la risposta 204 No Content
o 205 Reset Content ad Apigee Edge. Ovvero, il server di backend
NON DEVE inviare quanto segue come parte di una risposta 204 No Content o
205 Reset Content:
- Corpo del payload della risposta
- E una delle seguenti intestazioni:
Content-LengthContent-EncodingTransfer-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 una risposta
204 No Content o 205 Reset Content, ma
non rispetta le seguenti specifiche RFC:
| Specifica |
|---|
| RFC 7231, sezione 6.3.5: 204 No Content |
| RFC 7231, sezione 6.3.6: 205 Reset Content |
Punti chiave da tenere presenti
La soluzione consigliata è correggere il server di backend in modo che invii il codice di stato 204 No Content
e 205 Reset Content senza il corpo della risposta e senza le intestazioni
Content-Length, Content-Encoding e
Transfer-Encoding e che rispetti le specifiche
RFC 7231, sezione 6.3.5: 204 No Content e
RFC 7231, sezione 6.3.6: 205 Reset Content.
Se hai ancora bisogno dell'assistenza di Apigee, vai a Raccogliere le informazioni di diagnostica necessarie.
Raccogliere le informazioni di diagnostica necessarie
Raccogli le seguenti informazioni di diagnostica e poi contatta l'assistenza Apigee Edge:
Se sei un utente di Public Cloud, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome proxy API
- Comando
curlcompleto 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 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