431 Campi intestazione richiesta troppo grandi - TooBigHeaders

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 di 431 Request Header Fields Too Large con il codice di errore protocol.http.TooBigHeaders come risposta per l'API chiamate.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 431 Request Header Fields Too Large

Potresti inoltre 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 nell'ambito della richiesta HTTP è maggiore del limite consentito in Apigee Edge in base . RFC 6585, section 5: 431 Request Header Fields Too Large (Campi intestazione della richiesta troppo grandi).

Ecco le possibili cause di questo errore:

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
La dimensione delle intestazioni della richiesta è superiore al limite consentito La dimensione totale di tutte le intestazioni inviate dall'applicazione client come parte della richiesta HTTP a Apigee Edge supera il limite consentito in Apigee Edge. 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.TooBigHeaders e il codice di stato 431 come illustrato di seguito:

    ( visualizza immagine ingrandita)

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

    ( visualizza immagine ingrandita)

  8. Fai clic su Visualizza log ed espandi la riga relativa alla 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 il campo Origine errore ha il valore apigee o MP, il valore Il codice di errore ha il valore protocol.http.TooBigHeaders e La dimensione Lunghezza della richiesta è superiore a 25 kB, questo indica che la dimensione totale tutte le intestazioni delle richieste inviate dall'applicazione client come parte della richiesta HTTP rispetto a consentito in Apigee.

Strumento Trace

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 determinare le informazioni chiave sugli errori HTTP 431.
  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 si sono verificati 431 errori durante un intervallo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che non vanno a buon fine 431.
  4. Se riscontri errori 431 con il codice X-Apigee-fault-code corrispondente al valore di protocol.http.TooBigHeaders, quindi determina il valore della X-Apigee-fault-source.

    La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-code

    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 è 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, il X-Apigee-fault-code ha il valore protocol.http.TooBigHeaders e la Lunghezza della richiesta è 40 kB, ovvero maggiore del limite consentito in Apigee: 25 kB. Ciò indica chiaramente che dimensione totale di tutte le intestazioni della richiesta inviate dall'applicazione client come parte di HTTP ha superato il limite consentito di 25 kB in Apigee Edge.

Causa: la dimensione delle intestazioni delle richieste è superiore al limite consentito

Diagnosi

  1. Determina il codice di errore, l'origine errore e le dimensioni della lunghezza della richiesta per il valore osservato durante l'utilizzo dei log di monitoraggio delle API o di accesso NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se il campo Origine errore ha il valore apigee o MP, il codice di errore ha il valore protocol.http.TooBigHeaders, e Lunghezza della richiesta è superiore a 25 kB, il valore indica che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono maggiori di limite consentito in Apigee Edge.
  3. Puoi verificare che le dimensioni delle intestazioni delle richieste abbiano superato il limite consentito di 25 kB utilizzando una delle seguenti opzioni: utilizza i 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, consulta il 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 noti che la dimensione totale delle intestazioni è superiore a quella limite consentito in Apigee Edge, la causa del problema.

      Esempio di richiesta:

      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 è 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 per provare a scoprire le dimensioni 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 la dimensione delle intestazioni delle richieste ha superato 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 se ci sono errori 431 durante un intervallo specifico durata (se il problema si è verificato in passato) o se sono presenti richieste non funziona ancora con 431. Puoi utilizzare le stringhe di ricerca che seguono.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Troverai linee 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 il messaggio di errore riportato sopra indica che la dimensione totale delle intestazioni delle richieste è superiore a 25 kB. Pertanto, Apigee Edge genera l'eccezione com.apigee.errors.http.user.RequestHeadersTooLarge e resi Codice di stato 431 con codice di errore protocol.http.TooBigHeaders per le applicazioni client.

Risoluzione

Correggi dimensioni

Opzione 1 [consigliata]: correggi l'applicazione client per non inviare le intestazioni delle richieste con dimensione totale superiore al limite consentito

  1. Analizza il motivo per cui il client specifico invia un'intestazione della richiesta con che rende le dimensioni totali dell'intestazione superiori al limite consentito come definito in Limiti.
  2. Se non è opportuno, 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 l'intestazione lunga. 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 preferisci inviare un'intestazione con un limite superiore a quello consentito, vai alla sezione l'opzione successiva.

CwC

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

Apigee offre una CwC, che consente di aumentare il limite delle dimensioni delle righe della richiesta. Per maggiori dettagli, vedi Imposta 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 con dimensioni superiori al limite consentito documentato per il limite di dimensione dell'intestazione richiesta/risposta in Limiti di Apigee Edge.

  1. Se sei un utente del cloud pubblico, il limite massimo per La dimensione delle intestazioni di richiesta e risposta è quella documentata per la dimensione intestazione richiesta/risposta in Limiti di Apigee Edge.
  2. Se sei un utente Private Cloud , potresti aver modificato il valore massimo predefinito limite per la dimensione delle intestazioni di richiesta e risposta (anche se non è una pratica consigliata). Per determinare il limite massimo di dimensioni dell'intestazione della richiesta, segui le istruzioni riportate in Come controllare il limite attuale.

Come si controlla il limite attuale?

Questa sezione spiega come verificare che la proprietà HTTPRequest.headers.limit abbia è stato aggiornato con un nuovo valore per i processori di messaggi.

  1. Cerca la proprietà sul computer HTTPRequest.headers.limit in nella directory /opt/apigee/edge-message-processor/conf e controlla in vedi quale valore è stato impostato come mostrato di seguito:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Il risultato di esempio dal comando precedente è 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 è stato impostato con il valore 25k in http.properties.

    Questo indica che il limite per le dimensioni dell'intestazione della richiesta configurato in Apigee per i contenuti privati Cloud è di 25 kB.

Specifica

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

Specifica
RFC 6585, section 5: 431 Campo intestazione della richiesta troppo grande

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 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 proxy API
  • File di traccia per le richieste API non riuscite
  • Completa il comando curl utilizzato per riprodurre l'errore 431
  • 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