414 Request-URI Too Long - TooBigLine

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 414 Request-URI Too Long con il codice di errore protocol.http.TooBigLine in risposta alle chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 414 Request-URI Too Long

Potresti inoltre visualizzare il seguente messaggio di errore:

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Tieni presente che faultstring nel messaggio di errore riportato sopra include il limite consentito per la riga della richiesta in Apigee Edge, che è 7168 bytes (7 kB).

Possibili cause

Questo errore si verifica se le dimensioni della riga di richiesta inviata dall'applicazione client ad Apigee Edge come parte della richiesta HTTP è superiore al limite consentito in Apigee Edge.

Prima di esaminare le possibili cause di questo errore, vediamo a cosa serve la riga della richiesta e come verificarne le dimensioni.

Informazioni sulla riga di richiesta

Una tipica richiesta HTTP è composta da tre parti:

  1. Riga di richiesta
  2. ( Insieme di intestazioni HTTP)
  3. [ Corpo ]

La riga della richiesta è costituita da tre parti, come mostrato di seguito.

Request-Line = <Method> <Request-URI> <HTTP-Version>

Quando l'applicazione client effettua una richiesta HTTP a un server, la prima riga che rimanda Il server contiene la riga di richiesta descritta sopra. Segue il intestazioni e richiesta di corpo/payload.

Il seguente screenshot di esempio mostra una richiesta curl tipica, la Richiesta (insieme alla riga di richiesta) e la parte Response.

Informazioni sulle dimensioni della riga di richiesta

  1. Nell'esempio illustrato in precedenza, anche la riga iniziale (prima riga) della richiesta, denominata Riga di richiesta, è la seguente:
    GET /test/ HTTP/1.1
    

    La dimensione della riga di richiesta è ~19 bytes poiché contiene 19 ASCII characters. Poiché questo rientra tra i limite consentito in Apigee Edge, la richiesta viene elaborata senza errori e si ottiene una risposta positiva.

  2. Analogamente, se osservi il faultstring nella Messaggio di errore mostrato sopra, contiene "request line size exceeding 7,168". Questo indica che la riga di richiesta nella richiesta HTTP effettuata dal client ha superato 7168 byte.

Ecco le possibili cause di questo errore:

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
La dimensione del payload della richiesta è superiore al limite consentito La dimensione dell'URI della richiesta inviato dall'applicazione client come parte della comunicazione HTTP a Apigee Edge è superiore al 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.TooBigLine e il codice di stato 414 come illustrato di seguito:

    ( visualizza immagine ingrandita)

  7. Verranno visualizzate le informazioni sul codice di errore protocol.http.TooBigline 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: 414
    • Origine errore:apigee
    • Codice di errore: protocol.http.TooBigLine.
    • Lunghezza richiesta(byte): 7244 (> 7KB)
  10. Se il campo Origine errore ha il valore apigee o MP, il valore Il codice di errore ha il valore protocol.http.TooBigLine e Il valore Request-Length è superiore a 7 kB, significa che la richiesta HTTP dal client ha un URI della richiesta maggiore di 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 414.
  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 414 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 414.
  4. Se riscontri errori 414 con il codice X-Apigee-fault-code corrispondente al valore di protocol.http.TooBigLine, 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.TooBigLine
    X-Apigee-fault-source policy

    Prendi nota della lunghezza della richiesta: 7244 (7,244 kB > limite consentito)

Causa: la dimensione del payload della richiesta è 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 utilizzando i log di monitoraggio delle API, dello strumento di tracciamento o di accesso NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se il campo Origine errore ha il valore apigee o MP, allora 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 della riga della richiesta abbiano superato il limite consentito di 7 kB utilizzando uno di 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 della riga di richiesta supera il limite consentito di 7 kB.

    Esempio di messaggio di errore:

    "faultstring":"request line size exceeding 7,168"
    

    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 dell'URI passato nella richiesta.
    2. Se noti che la dimensione dell'URI è superiore a limite consentito in Apigee Edge, la causa del problema.

      Esempio di richiesta:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      Nel caso precedente, il valore del parametro di query qparam è più grande di 7 kB, ovvero contiene più di 7 K caratteri ASCII.

      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 per verificare se la dimensione della riga di richiesta 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 per vedere se ci sono errori 414 durante uno specifico durata (se il problema si è verificato in passato) o se sono presenti richieste non funziona ancora con 414. Puoi utilizzare le stringhe di ricerca che seguono.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Troverai linee da system.log simili alle seguenti:
      2021-07-12 08:53:31,461  NIOThread@0 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() : Request:null, uri:null,
      message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{
      code = protocol.http.TooBigLine, message = request line size exceeding 7,168,
      associated contexts = []}, context:Context@366f4217
      input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443
      Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849
      age=2254670ms lastIO=0ms isOpen=true)
      

      Il testo message = request line size exceeding 7,168 nel il messaggio di errore riportato sopra indica che la dimensione dell'URI della richiesta è superiore a 7 kB. Pertanto, Apigee Edge genera l'eccezione com.apigee.errors.http.user.RequestURITooLong e resi Codice di stato 414 con codice di errore protocol.http.TooBigline per le applicazioni client.

Risoluzione

Correggi dimensioni

Opzione 1 [consigliata]: correggi l'applicazione client per non inviare una dimensione dell'URI della richiesta superiore al limite consentito

  1. Analizza il motivo per cui il client specifico invia dimensioni dell'URI della richiesta superiori a limite consentito come definito in Limiti.
  2. Se non è opportuno, modifica l'applicazione client in modo che invii l'URI della richiesta sia inferiore al limite consentito.

    Nell'esempio discusso sopra, puoi risolvere il problema passando la query lunga come parte del corpo/payload della richiesta anziché passarlo come parte del parametro URL di richiesta come mostrato di seguito:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Se preferisci inviare un URI rispetto al limite consentito, vai alla sezione le opzioni successive.

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 righe di richiesta/risposta le cui dimensioni sono superiori al limite consentito come documentato per il limite di righe di richiesta/risposta in Apigee Edge Limits.

  1. Se sei un utente del cloud pubblico, il limite massimo per richieste e La dimensione della riga di risposta è quella documentata per le dimensioni della riga di richiesta/risposta in Limiti di Apigee Edge.
  2. Se sei un utente Private Cloud , potresti aver modificato il valore massimo predefinito limite per le dimensioni delle righe di richiesta e risposta (anche se non è una pratica consigliata). Per determinare il limite massimo per le dimensioni della riga di 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.line.limit abbia è stato aggiornato con un nuovo valore per i processori di messaggi.

  1. Cerca la proprietà sul computer HTTPRequest.line.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.line.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.line.limit=7k
    
  3. Nell'output di esempio riportato sopra, tieni presente che la proprietà HTTPRequest.line.limit è stato impostato con il valore 7k in http.properties.

    Questo indica che il limite per le dimensioni della riga di richiesta configurata in Apigee per i servizi privati Cloud è di 7 kB.

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