431 Campi intestazione richiesta troppo grandi - TooBigHeaders

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Sintomo

L'applicazione client riceve un codice di stato HTTP 431 Request Header Fields Too Large con il codice di errore protocol.http.TooBigHeaders come risposta alle 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 a Apigee Edge come parte della richiesta HTTP è maggiore del limite consentito in Apigee Edge come indicato nella sezione 5: 431 Request Header Fields Too Large della RFC 6585.

Di seguito sono riportate le possibili cause di questo errore:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili per
Le dimensioni delle intestazioni delle richieste sono maggiori del limite consentito La dimensione totale di tutte le intestazioni inviate dall'applicazione client come parte della richiesta HTTP a Apigee Edge è maggiore del limite consentito in Apigee Edge. Utenti di Edge Public Cloud 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:

  1. Accedi all'interfaccia utente 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 delle API > Esamina.
  4. Seleziona l'intervallo di tempo specifico in cui hai osservato gli errori.
  5. Traccia il codice di errore rispetto al tempo.
  6. Seleziona una cella con il codice di errore protocol.http.TooBigHeaders e codice di stato 431, come mostrato di seguito:

    ( vedi immagine più grande)

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

    ( vedi immagine più grande)

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

    ( vedi immagine più grande)

  9. Nella finestra Log, prendi nota dei seguenti dettagli:

    • Codice di stato: 431
    • Origine dell'errore: apigee
    • Codice di errore: protocol.http.TooBigHeaders.
    • Lunghezza della 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 la Lunghezza della richiesta è maggiore di 25 KB, significa che la dimensione totale di tutte le intestazioni delle richieste inviate dall'applicazione client come parte della richiesta HTTP è maggiore del limite consentito in Apigee.

Strumento Traccia

NGINX

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

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

  3. Cerca per verificare se si sono verificati errori 431 durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con 431.
  4. Se trovi errori 431 con X-Apigee-fault-code corrispondente al valore di protocol.http.TooBigHeaders, determina il valore di X-Apigee-fault-source.

    La voce di esempio riportata sopra nel 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.TooBigHeaders
    X-Apigee-fault-source MP

    Prendi nota della lunghezza della richiesta: 40159 (40 KB è maggiore di 25 KB, il limite consentito per le intestazioni delle richieste in Apigee Edge)

    Nella voce di log di esempio riportata sopra, X-Apigee-fault-source ha il valore apigee o MP, X-Apigee-fault-code ha il valore protocol.http.TooBigHeaders e Lunghezza della richiesta è 40 KB, che è maggiore del limite consentito in Apigee, ovvero 25 KB. Ciò indica chiaramente che la dimensione totale di tutte le intestazioni delle richieste inviate dall'applicazione client come parte della richiesta HTTP ha superato il limite consentito di 25 KB in Apigee Edge.

Causa: le dimensioni delle intestazioni delle richieste sono maggiori del limite consentito

Diagnosi

  1. Determina il codice di errore, l'origine dell'errore e le dimensioni della lunghezza della richiesta per l' errore osservato utilizzando i log degli accessi NGINX o il monitoraggio delle API, come spiegato in Passaggi comuni per la diagnosi.
  2. Se Origine dell'errore ha il valore apigee o MP, Codice di errore ha il valore protocol.http.TooBigHeaders, e Lunghezza della richiesta è maggiore di 25 KB, significa che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono maggiori del 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, allora fai riferimento a faultstring. Il faultstring indica che la dimensione totale delle intestazioni delle richieste ha superato il limite consentito di 25 KB.

    Messaggio di errore di esempio:

    "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 le dimensioni delle intestazioni passate nella richiesta.
    2. Se riscontri che la dimensione totale delle intestazioni è maggiore del limite consentito in Apigee Edge, 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 riportato sopra, la dimensione totale delle intestazioni header0, header1, header2, e header3 è maggiore di 25 KB, ovvero contiene più di 25.000 caratteri ASCII (byte).

      Se utilizzi un altro client, puoi esaminare i log del client e provare a scoprire le dimensioni della riga della 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 di Private Cloud, 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 verificare se si sono verificati errori 431 durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con 431. Puoi utilizzare le seguenti stringhe di ricerca.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Troverai 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 riportato sopra indica che la dimensione totale delle intestazioni delle richieste è maggiore di 25 KB. Di conseguenza, Apigee Edge genera l'eccezione com.apigee.errors.http.user.RequestHeadersTooLarge e restituisce il codice di stato 431 con il codice di errore protocol.http.TooBigHeaders alle applicazioni client.

Risoluzione

Dimensioni fisse

Opzione 1 [consigliata]: correggi l'applicazione client in modo che non invii intestazioni delle richieste con una dimensione totale maggiore del limite consentito

  1. Analizza il motivo per cui il client specifico invia l'intestazione della richiesta con dimensioni elevate , il che fa sì che la dimensione totale dell'intestazione superi il limite consentito definito in Limiti.
  2. Se non è auspicabile, 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 delle intestazioni lunghe come parte del corpo/payload della richiesta:

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

CwC

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

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

Limiti

Apigee si aspetta che l'applicazione client e il server di backend non inviino intestazioni di richieste/risposte le cui dimensioni sono maggiori del limite consentito, come documentato per il limite di dimensioni delle intestazioni di richieste/risposte in Limiti di Apigee Edge.

  1. Se sei un utente di Public Cloud, il limite massimo per le dimensioni delle intestazioni di richieste e risposte è quello documentato per Dimensioni delle intestazioni di richieste/risposte in Limiti di Apigee Edge.
  2. Se sei un utente di Private Cloud, potresti aver modificato il limite massimo predefinito per le dimensioni delle intestazioni di richieste e risposte (anche se non è una pratica consigliata). Puoi determinare il limite massimo di dimensioni delle intestazioni delle richieste seguendo le istruzioni riportate in Come controllare il limite attuale.

Come controllare 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. Nella macchina del processore di messaggi, cerca la proprietà HTTPRequest.headers.limit nella /opt/apigee/edge-message-processor/conf directory e controlla il valore 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.

    Ciò indica che il limite per le dimensioni delle intestazioni delle richieste configurato in Apigee per Private Cloud è di 25 KB.

Specifica

Apigee Edge si aspetta che l'applicazione client non invii intestazioni di grandi dimensioni come parte della richiesta. Se la richiesta contiene intestazioni con una dimensione totale superiore al limite specificato, Apigee genera 431 Request Header Fields Too Large in base alle seguenti specifiche RFC

Specifica
RFC 6585, sezione 5: 431 Request Header Fields Too Large

Se hai ancora bisogno dell'assistenza del supporto Apigee, vai a Raccolta delle informazioni di diagnostica.

Raccolta delle informazioni di diagnostica

Raccogli le seguenti informazioni di diagnostica, quindi contatta il supporto Apigee Edge:

Se sei un utente di Public Cloud, fornisci le seguenti informazioni:

  • Nome organizzazione
  • Nome ambiente
  • Nome del proxy API
  • Comando curl completo utilizzato per riprodurre l'errore 431
  • 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 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