414 Request-URI Too Long - TooBigLine

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP 414 Request-URI Too Long con codice di errore protocol.http.TooBigLine come risposta per le chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 414 Request-URI Too Long

Inoltre, potresti 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 contiene il limite consentito per la riga di richiesta in Apigee Edge, ovvero 7168 bytes (7 kB).

Possibili cause

Questo errore si verifica se le dimensioni della riga di richiesta inviata dall'applicazione client ad Apigee Edge nell'ambito della richiesta HTTP superano il limite consentito in Apigee Edge.

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

Informazioni sulla riga di richiesta

Una tipica richiesta HTTP è costituita 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 invia una richiesta HTTP a un server, la prima riga che rimanda al server contiene la Request-Line descritta sopra. seguito dalle intestazioni e dal corpo della richiesta/payload.

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

Informazioni sulle dimensioni della riga di richiesta

  1. Nell'esempio discusso sopra, la riga start (prima riga) della richiesta, denominata anche Request-Line, è la seguente:
    GET /test/ HTTP/1.1
    

    La dimensione della riga di richiesta è ~19 bytes poiché contiene 19 ASCII characters. Poiché rientra nel limite consentito in Apigee Edge, la richiesta viene elaborata senza errori e ricevi una risposta corretta.

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

Di seguito sono riportate le possibili cause di questo errore:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Le dimensioni del payload della richiesta superano il limite consentito Le dimensioni dell'URI della richiesta inviato 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.TooBigLine e il codice di stato 414, come mostrato di seguito:

    ( visualizza immagine ingrandita)

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

    Tieni presente la lunghezza della richiesta: 7244 (7,244 kB > limite consentito)

Causa: le dimensioni del payload della richiesta 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 utilizzando i log di accesso dell'API Monitoring, Trace Tool o NGINX, come spiegato nella sezione Passaggi comuni di diagnosi.
  2. Se l'Origine dell'errore ha il valore apigee o MP, questo 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 della riga della richiesta abbiano superato il limite consentito di 7 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 le dimensioni della riga di richiesta hanno superato 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 trasmesso nella richiesta.
    2. Se noti che le dimensioni dell'URI superano il limite consentito in Apigee Edge, allora è questa la causa del problema.

      Richiesta di esempio:

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

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

      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 della riga di richiesta 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 414 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 414. Puoi utilizzare le seguenti stringhe di ricerca.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Sono disponibili righe 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 messaggio di errore riportato sopra indica che le dimensioni dell'URI della richiesta sono superiori a 7 kB. Di conseguenza, Apigee Edge genera l'eccezione com.apigee.errors.http.user.RequestURITooLong e restituisce il codice di stato 414 con codice di errore protocol.http.TooBigline alle applicazioni client.

Risoluzione

Correggi dimensione

Opzione 1 [consigliata]: correggi l'applicazione client in modo che non invii una dimensione dell'URI della richiesta superiore al limite consentito

  1. Analizza il motivo per cui il client specifico ha inviato una dimensione dell'URI della richiesta superiore al limite consentito come definito in Limiti.
  2. Se non è opportuno, modifica l'applicazione client in modo che invii le dimensioni dell'URI della richiesta inferiori al limite consentito.

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

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Se è opportuno e vuoi inviare un URI oltre il limite consentito, vai alle opzioni successive.

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

  1. Se sei un utente del cloud pubblico, il limite massimo per le dimensioni delle linee di richiesta e risposta è come documentato per le dimensioni della riga di 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 richieste e delle righe di risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo delle dimensioni della riga di 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.line.limit sia stata aggiornata con un nuovo valore nei processori di messaggi.

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

    Questo indica che il limite per le dimensioni della riga di richiesta configurate in Apigee per il cloud privato è di 7 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 414
  • 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 414
  • 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