502 Bad Gateway - ResponseWithBody

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 Content-Length

(impostato su un valore diverso da zero)

ERRORE ERRORE

Content-Encoding

(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:

  1. Accedi alla UI di Apigee Edge come utente con ruolo appropriato.
  2. Passa all'organizzazione in cui vuoi esaminare il problema.

  3. Vai al menu Analizza > Monitoraggio delle API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
  5. Traccia il codice di errore in base all'ora.
  6. Seleziona una cella con il codice di errore protocol.http.ResponseWithBody come mostrato di seguito:

    ( visualizza immagine ingrandita)

  7. Verranno visualizzate le informazioni sul codice di errore protocol.http.ResponseWithBody come mostrato di seguito:

    ( visualizza immagine ingrandita)

  8. Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.

    ( visualizza immagine ingrandita)

  9. Nella finestra Log, tieni presente i seguenti dettagli:
      .
    • Codice di stato: 502
    • Origine errore:target
    • Codice di errore: protocol.http.ResponseWithBody.
  10. Se Origine di errore presenta il valore target e l'errore Code ha il valore protocol.http.ResponseWithBody, indica che l'errore si è verificato perché il server di backend ha inviato un Codice di stato 204 No Content o 205 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:

  1. Attiva la sessione di traccia e:
      .
    1. Attendi che si verifichi l'errore 502 Bad Gateway. o
    2. Se riesci a riprodurre il problema, effettua la chiamata API e riproduci l'errore 502 Bad Gateway.
  2. Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:

  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Navigare attraverso le diverse fasi della traccia e individuare il punto in cui si è verificato l'errore si è verificato un errore.
  5. 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
  6. Vai alla fase AX (Analytics Data Recorded) nella traccia. e fai clic su questa opzione.
  7. 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:

    ( visualizza immagine ingrandita)

  8. Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source. are protocol.http.ResponseWithBody e target rispettivamente. Indica che l'errore si è verificato perché il server di backend ha inviato un Codice di stato 204 No Content o 205 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:

  1. Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per per determinare le informazioni chiave su HTTP 502 Bad Gateway.
  2. 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.

  3. Cerca per vedere se ci sono errori 502 con codice di errore protocol.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 fine 502.
  4. Se riscontri errori 502 con il X-Apigee-fault-code corrispondente al valore di protocol.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
  5. Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source. sono rispettivamente protocol.http.ResponseWithBody e target. Indica che l'errore si è verificato perché il server di backend ha inviato un Codice di stato 204 No Content o 205 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

  1. 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.
  2. Se il codice di errore è protocol.http.ResponseWithBody e Origine errore ha il valore target, questo indica che il backend server ha risposto con stato 204 No Content o 205 Reset Content codice con il corpo della risposta e/o una delle intestazioni menzionate Possibili cause.
  3. 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:

    1. 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.

    2. 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.
    3. 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-alive
      

      In questo esempio, il server di backend ha risposto con Codice di stato di 204 No Content e Content-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-alive
      

      In questo esempio, il server di backend ha risposto con Codice di stato di 204 No Content e Content-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 risposta This is a sample Response.

    4. In tutti gli esempi precedenti, il server di backend ha inviato 204 No Content o Codice di stato 205 Reset Content con il corpo della risposta e/o una delle intestazioni menzionato in Possibili cause.
    5. Di conseguenza, Apigee Edge ha inviato un codice di stato 502 Bad Gateway con codice di errore protocol.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:

  1. Corpo payload risposta
  2. E una qualsiasi delle seguenti intestazioni:
    1. Content-Length
    2. Content-Encoding
    3. 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'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 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