431 Campi intestazione richiesta troppo grandi - 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 431 Request Header Fields Too Large 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 431 Request Header Fields Too Large

Inoltre, potresti visualizzare il seguente messaggio di errore:

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

Possibili cause

Questo errore si verifica se la dimensione totale di tutte le intestazioni delle richieste inviate dall'applicazione client ad Apigee Edge nell'ambito della richiesta HTTP supera il limite consentito in Apigee Edge secondo i campi delle intestazioni delle richieste RFC 6585, sezione 5: 431 troppo grandi.

Di seguito sono riportate le possibili cause di questo errore:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Le dimensioni delle intestazioni delle richieste superano il limite consentito La dimensione totale di tutte le intestazioni inviate dall'applicazione client nell'ambito della richiesta 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. Traccia Codice di errore su Ora.
  6. Seleziona una cella con il codice di errore protocol.http.TooBigHeaders e il codice di stato 431, come mostrato di seguito:

    ( visualizza immagine ingrandita)

  7. Verranno visualizzate le informazioni relative al codice di errore protocol.http.TooBigHeaders 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: 431
    • Origine errore: apigee
    • Codice di errore: protocol.http.TooBigHeaders.
    • Lunghezza richiesta(byte): 32150 (> 25 KB)
  10. Se l'Origine dell'errore ha il valore apigee o MP, il Codice di errore ha il valore protocol.http.TooBigHeaders e Lunghezza richiesta è superiore a 25 kB significa che le dimensioni totali di tutte le intestazioni delle richieste inviate dall'applicazione client nell'ambito della richiesta HTTP superano il limite consentito in Apigee.

Strumento Traccia

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 sugli errori HTTP 431.
  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 431 durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non riuscire con 431.
  4. Se riscontri errori 431 con X-Apigee-fault-code corrispondenti al valore di protocol.http.TooBigHeaders, determina il valore di X-Apigee-fault-source.

    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 della risposta Valore
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    Tieni presente la lunghezza della richiesta: 40159 (40 kB è superiore a 25 kB, il limite consentito per le intestazioni delle richieste in Apigee Edge)

    Nella voce di log di esempio sopra riportata, X-Apigee-fault-source ha il valore apigee o MP, X-Apigee-fault-code ha il valore protocol.http.TooBigHeaders e Request Length è 40 kB, che è maggiore del limite consentito in Apigee - 25 kB. Questo indica chiaramente che le dimensioni totali di tutte le intestazioni delle richieste inviate dall'applicazione client nell'ambito di una richiesta HTTP hanno superato il limite consentito di 25 kB in Apigee Edge.

Causa: le dimensioni delle intestazioni delle richieste superano il limite consentito

Diagnostica

  1. Determina il codice di errore, l'origine del errore e la dimensione della lunghezza della richiesta per l'errore osservato mediante i log di API Monitoring o accesso NGINX, come spiegato nella sezione Passaggi comuni di diagnosi.
  2. Se l'Origine dell'errore ha il valore apigee o MP, il Codice di errore ha il valore protocol.http.TooBigHeaders e la Lunghezza richiesta è superiore a 25 kB, ciò indica che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono superiori al limite consentito in Apigee Edge.
  3. Puoi verificare che le dimensioni delle intestazioni delle richieste abbiano superato il limite consentito di 25 kB 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 la dimensione totale delle intestazioni delle richieste ha superato il limite consentito di 25 kB.

    Esempio di messaggio di errore:

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

    Richiesta effettiva

    Per eseguire la convalida utilizzando la richiesta effettiva:

    Se hai accesso alla richiesta effettiva effettuata dall'applicazione client, segui questi passaggi:

    1. Verifica la dimensione delle intestazioni passate nella richiesta.
    2. Se la dimensione totale delle intestazioni supera il limite consentito in Apigee Edge, allora è questa la causa del problema.

      Richiesta di esempio:

      curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
      

      Nel caso precedente, la dimensione totale delle intestazioni header0, header1, header2 e header3 è superiore a 25 kB, ovvero contiene più di 25 K caratteri ASCII (byte).

      Se utilizzi un altro client, puoi esaminare i log del client e provare a scoprire la dimensione della riga di richiesta inviata ad 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 richieste 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 431 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 431. Puoi utilizzare le seguenti stringhe di ricerca.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Sono disponibili righe da system.log simili alle seguenti:
      2021-07-27 08:30:28,419  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() :
      Request:GET, uri:/test/, message Id:null,
      exception:com.apigee.errors.http.user.RequestHeadersTooLarge{
      code = protocol.http.TooBigHeaders, message = request headers size
      exceeding 25,600, associated contexts = []}, context:Context@9c5903
      input=ClientInputChannel(SSLClientChannel[Accepted:
      Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130
      useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms  lastIO=0ms
      isOpen=true)
      

      Il testo message = request headers size exceeding 25,600 nel messaggio di errore sopra riportato indica che le dimensioni totali delle intestazioni delle richieste sono superiori a 25 kB. Di conseguenza, Apigee Edge genera l'eccezione com.apigee.errors.http.user.RequestHeadersTooLarge e restituisce il codice di stato 431 con codice di errore protocol.http.TooBigHeaders alle applicazioni client.

Risoluzione

Correggi dimensione

Opzione 1 [consigliata]: correggi l'applicazione client in modo che non invii intestazioni delle richieste con dimensioni totali superiori al limite consentito

  1. Analizza il motivo per cui il client specifico invia un'intestazione della richiesta di grandi dimensioni in modo che le dimensioni totali dell'intestazione siano superiori al limite consentito come definito in Limiti.
  2. Se non lo desideri, modifica l'applicazione client in modo che invii intestazioni delle richieste di dimensioni inferiori al limite consentito.

    Nell'esempio discusso sopra, puoi risolvere il problema passando il parametro dei valori dell'intestazione lunga come parte del corpo della richiesta/payload:

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. Se è opportuno e vuoi inviare un'intestazione superiore al limite consentito, vai all'opzione successiva.

CwC

Opzione 2 : utilizza la proprietà CwC per aumentare il limite di righe della richiesta

Apigee fornisce una proprietà CwC che le consente di aumentare il limite di dimensione della riga della richiesta. Per maggiori dettagli, consulta Impostare il limite di righe di richiesta sul processore di messaggi

Limiti

Apigee si aspetta che l'applicazione client e il server di backend non inviino intestazioni di richiesta/risposta le cui dimensioni sono superiori al limite consentito come documentato per il limite di dimensioni delle intestazioni di richiesta/risposta nei limiti di Apigee Edge.

  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 Apigee Edge Limits.
  2. Se sei un utente Private Cloud , potresti aver modificato il limite massimo predefinito per le dimensioni delle intestazioni delle richieste e delle risposte, anche se non è una pratica consigliata. Puoi determinare il limite massimo delle dimensioni dell'intestazione della richiesta seguendo le istruzioni in Come verificare il limite attuale.

Come si controlla il limite attuale?

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

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

    Questo indica che il limite per le dimensioni dell'intestazione della richiesta configurate in Apigee per il cloud privato è 25 kB.

Specifiche

Apigee Edge prevede che l'applicazione client non invii intestazioni di grandi dimensioni nell'ambito della richiesta. Se la richiesta contiene intestazioni con dimensioni totali superiori al limite specificato, Apigee restituisce 431 Request Header Fields Too Large in base alle seguenti specifiche RFC:

Specifiche
RFC 6585, sezione 5: 431 Request Header Fields (Campi intestazione richiesta troppo grandi)

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 431
  • 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 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 431
  • 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