502 Bad Gateway - TooBigHeaders

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 codice di errore protocol.http.TooBigHeaders 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, potresti visualizzare il seguente messaggio di errore:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Possibili cause

Questo errore si verifica se la dimensione totale delle intestazioni inviate dal server di destinazione/backend ad Apigee Edge come parte della risposta HTTP supera il limite consentito in Apigee Edge.

Di seguito sono riportate le possibili cause di questo errore:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
La dimensione delle intestazioni nella risposta supera il limite consentito La dimensione dell'intestazione di una determinata intestazione o la somma delle dimensioni di tutte le intestazioni inviate dal server di destinazione/backend come parte della risposta HTTP ad Apigee Edge superano il limite consentito in Apigee Edge. 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:

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

  3. Vai alla pagina Analizza > Monitoraggio API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
  5. Puoi selezionare il filtro Proxy per restringere il codice di errore.
  6. Traccia Codice di errore su Ora.
  7. Seleziona una cella con il codice di errore protocol.http.TooBigHeaders come mostrato di seguito:

    ( visualizza immagine ingrandita)

  8. Vedrai le informazioni relative al codice di errore protocol.http.TooBigHeaders, come mostrato di seguito:

    ( visualizza immagine ingrandita)

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

    ( visualizza immagine ingrandita)

  10. Nella finestra Log, prendi nota dei seguenti dettagli:
    • Codice di stato: 502
    • Origine errore: target
    • Codice di errore: protocol.http.TooBigHeaders.
  11. Se l'Origine dell'errore ha il valore target e il Codice di errore ha il valore protocol.http.TooBigHeaders, ciò indica che la risposta HTTP del server di destinazione/ di backend ha intestazioni le cui dimensioni sono superiori al limite consentito in Apigee Edge.

Strumento Traccia

  1. Abilita la sessione di traccia e:
    1. Attendi che si verifichi l'errore 502 Bad Gateway oppure
    2. Se riesci a riprodurre il problema, effettua la chiamata API e riproduci l'errore 502 Bad Gateway.
  2. Seleziona una delle richieste non riuscite ed esamina la traccia.
  3. Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
  4. In genere, questo errore viene visualizzato nel flusso denominato Errore subito dopo la fase Richiesta inviata al server di destinazione, come mostrato di seguito:

    ( visualizza immagine ingrandita)

    Prendi nota dei valori dell'errore dalla traccia:

    • errore: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Questo indica che Apigee Edge (componente Message Processor) genera l'errore non appena riceve la risposta dal server di backend a causa di una dimensione dell'intestazione che supera il limite consentito.

  5. Visualizzerai l'errore nella risposta di errore Response sent to client (Risposta inviata al client) inviata da Apigee Edge, come mostrato di seguito:

    ( visualizza immagine ingrandita)

  6. Prendi nota dei valori dell'errore della traccia. La traccia di esempio riportata sopra mostra:
    • Errore: 502 Bad Gateway.
    • Contenuto dell'errore: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Vai alla fase AX (Analytics Data Recorded) nella traccia e fai clic per visualizzare i dettagli correlati.

    ( visualizza immagine ingrandita)

    Prendi nota del valore dei seguenti valori:

    Intestazioni degli errori Valore
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Contenuti dell'errore: corpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:

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

  3. Cerca per vedere se si sono verificati errori 502 con il codice di errore protocol.http.TooBigHeaders durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con 502.
  4. Se riscontri errori 502 con X-Apigee-fault-code corrispondenti al valore di protocol.http.TooBigHeaders, 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 di NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-source:

    Intestazioni degli errori Valore
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Causa: le dimensioni delle intestazioni nella risposta superano il limite consentito

Diagnostica

  1. Determina il codice di errore, l'origine dell'errore e la dimensione payload della risposta per l'errore osservato utilizzando i log di monitoraggio dell'API, strumento Trace o accesso NGINX, come spiegato nella sezione Passaggi di diagnostica comuni.
  2. Se l'Origine dell'errore ha il valore target, significa che la risposta inviata dal server di destinazione/backend ad Apigee ha intestazioni la cui dimensione è superiore al limite consentito in Apigee Edge.
  3. Puoi verificare che la risposta dal target/backend abbia intestazioni le cui dimensioni sono superiori al limite consentito 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, fai riferimento all'faultstring. faultstring indica che le dimensioni dell'intestazione della risposta hanno superato il limite consentito.

    Esempio di messaggio di errore:

    "faultstring":"response headers size exceeding 25,600"
    

    Nel messaggio di errore riportato sopra, nota in faultstring che la risposta contiene intestazioni le cui dimensioni totali superano il limite consentito.

    Richiesta effettiva

    Per eseguire la convalida utilizzando la richiesta effettiva:

    Se hai accesso alla richiesta effettiva fatta al server di destinazione/backend, segui questi passaggi:

    1. Se sei un utente di cloud pubblico/private cloud, effettua una richiesta direttamente al server di backend dal server di backend stesso o da qualsiasi altra macchina da cui hai l'autorizzazione per effettuare la richiesta al server di backend.
    2. Se sei un utente Private Cloud, puoi anche effettuare la richiesta al server di backend da uno dei processori di messaggi.
    3. Esamina la risposta ricevuta dal server di backend, in particolare calcola e verifica la dimensione totale delle intestazioni trasmesse nella risposta.
    4. Se noti che la dimensione delle intestazioni nel payload della risposta supera il limite consentito in Apigee Edge, allora questa è la causa del problema.

      Esempio di risposta dal server di destinazione:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      Nell'esempio precedente, Testheader1 e Testheader2 hanno dimensioni più elevate e questo è la causa di questo errore poiché supera il limite consentito in Apigee Edge.

    Log del processore di messaggi

    Per eseguire la convalida utilizzando i log del processore di messaggi:

    Se sei un utente del cloud privato, puoi utilizzare i log del processore di messaggi per verificare se le dimensioni delle intestazioni delle risposte hanno superato il limite consentito in Apigee Edge.

    1. Controlla i log del processore di messaggi:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Cerca per vedere se si sono verificati errori 502 durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con 502. Puoi utilizzare la seguente stringa di ricerca:
      grep -ri "response headers size exceeding"
      
    3. Troverai righe di system.log simili alle seguenti. Le dimensioni delle intestazioni delle risposte possono variare nel tuo caso:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
      
    4. Non appena il processore di messaggi riceve la risposta dal server di backend/destinazione e rileva che la dimensione totale delle intestazioni è superiore a 25 kB, si interrompe e visualizza l'errore:

      response headers size exceeding 25,600

      Ciò implica che le dimensioni totali delle intestazioni sono superiori a 25 kB e Apigee genera l'errore quando la dimensione inizia a superare il limite di 25 kB con codice di errore protocol.http.TooBigHeaders

Risoluzione

Correggi dimensione

Opzione 1 [consigliata]: correggi l'applicazione server di destinazione in modo che non invii intestazioni di dimensione superiore al limite di Apigee

  1. Analizza il motivo per cui il server di destinazione specifico invia una dimensione dell'intestazione della risposta superiore al limite consentito come definito in Limiti.
  2. Se non è opportuno, modifica l'applicazione del server di backend in modo che invii le intestazioni della risposta le cui dimensioni sono inferiori al limite consentito in Apigee Edge.
  3. Verifica se le informazioni dell'intestazione possono essere inviate come parte del corpo della risposta.
  4. Se possibile, invia tutte le informazioni di grandi dimensioni che volevi inviare come parte dell'intestazione nel corpo della risposta. Ciò garantirà di non superare il limite di intestazione della risposta.

CwC

Opzione 2 : utilizza la proprietà CwC per aumentare il limite di dimensione dell'intestazione della risposta

Apigee fornisce una proprietà CwC che le consente di aumentare il limite di dimensioni delle intestazioni delle risposte. Per maggiori dettagli, consulta Configurare i limiti per il processore di messaggi

Limiti

Apigee si aspetta che l'applicazione client e il server di backend non inviino dimensioni delle intestazioni superiori al limite consentito come documentato per le dimensioni dell'intestazione della richiesta/risposta in Apigee Edge Limits.

  1. Se sei un utente del cloud pubblico, il limite massimo per le dimensioni delle intestazioni delle richieste e delle risposte è come documentato per le dimensioni dell'intestazione della richiesta/risposta in Limiti di Apigee Edge.
  2. Se sei un utente Private Cloud , potresti aver modificato il limite massimo predefinito per le dimensioni delle intestazioni Richieste e Risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo delle dimensioni dell'intestazione di risposta seguendo le istruzioni in Come verificare il limite attuale.

Come si controlla il limite attuale?

Questa sezione spiega come verificare che la proprietà HTTPResponse.headers.limit sia stata aggiornata con un nuovo valore nei processori di messaggi.

  1. Nel computer del processore di messaggi, cerca la proprietà HTTPResponse.headers.limit nella directory /opt/apigee/edge-message-processor/conf e controlla quale valore sia stato impostato come mostrato di seguito:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Il risultato di esempio del comando riportato sopra è il seguente:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. Nell'output di esempio riportato sopra, tieni presente che la proprietà HTTPResponse.headers.limit è stata impostata con il valore 25k in http.properties.

    Questo indica che il limite per la dimensione del payload della risposta configurata in Apigee per il cloud privato è di 25 kB.

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'errore 502
  • File di traccia per le richieste API
  • Output completo della risposta dal server di destinazione/backend insieme alle dimensioni delle intestazioni

Se sei un utente Private Cloud, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome dell'organizzazione.
  • Nome ambiente
  • Bundle del proxy API
  • File di traccia per le richieste API non riuscite
  • Comando curl completo utilizzato per riprodurre l'errore 502
  • Output completo della risposta dal server di destinazione/backend insieme alle dimensioni delle intestazioni
  • 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