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:
- Riga di richiesta
- ( Insieme di intestazioni HTTP)
- [ 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
- 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é contiene19 ASCII characters
. Poiché rientra nel limite consentito in Apigee Edge, la richiesta viene elaborata senza errori e ricevi una risposta corretta. - 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:
- Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai alla pagina Analizza > Monitoraggio API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
- Traccia Codice di errore su Ora.
- Seleziona una cella con il codice di errore
protocol.http.TooBigLine
e il codice di stato414
, come mostrato di seguito: Verranno visualizzate le informazioni relative al codice di errore
protocol.http.TooBigline
come mostrato di seguito:Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita:
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)
- Codice di stato:
- Se l'Origine dell'errore ha il valore
apigee
oMP
, il Codice di errore ha il valoreprotocol.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:
- Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave sugli errori HTTP
414
. 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.
- 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 con414
. Se riscontri errori
414
con X-Apigee-fault-code corrispondenti al valore diprotocol.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
- 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.
- Se l'Origine dell'errore ha il valore
apigee
oMP
, questo indica che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono superiori al limite consentito in Apigee Edge. - 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:
- Verifica le dimensioni dell'URI trasmesso nella richiesta.
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.
Controlla i log del processore di messaggi:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 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 con414
. Puoi utilizzare le seguenti stringhe di ricerca.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- 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'eccezionecom.apigee.errors.http.user.RequestURITooLong
e restituisce il codice di stato414
con codice di erroreprotocol.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
- Analizza il motivo per cui il client specifico ha inviato una dimensione dell'URI della richiesta superiore al limite consentito come definito in Limiti.
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
- 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.
- 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.
- 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.
- 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
- Il risultato di esempio del comando riportato sopra è il seguente:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
Nell'output di esempio riportato sopra, tieni presente che la proprietà
HTTPRequest.line.limit
è stata impostata con il valore7k
inhttp.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'errore414
- 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'errore414
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