Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
L'applicazione client riceve un codice di stato HTTP 414 Request-URI Too Long con
codice di errore protocol.http.TooBigLine come risposta alle 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 della richiesta in Apigee Edge, ovvero 7168 bytes (7 KB).
Possibili cause
Questo errore si verifica se le dimensioni della riga della richiesta inviata dall'applicazione client ad Apigee Edge come parte della richiesta HTTP sono maggiori del limite consentito in Apigee Edge.
Prima di esaminare le possibili cause di questo errore, cerchiamo di capire cosa significa la riga della richiesta e come verificarne le dimensioni.
Informazioni sulla riga della richiesta
Una tipica richiesta HTTP è composta da tre parti:
- Riga della richiesta
- ( Set di intestazioni HTTP )
- [ Corpo ]
La riga della richiesta è composta 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 inviata a il server contiene la riga della richiesta descritta sopra. Seguono le intestazioni e il corpo/payload della richiesta.
Lo screenshot di esempio seguente mostra una tipica richiesta curl, la parte Request (insieme alla riga della richiesta) e la parte Response.
Informazioni sulle dimensioni della riga della richiesta
- Nell'esempio discusso sopra, la riga start (prima riga) nella richiesta, chiamata anche riga della richiesta, è la seguente:
GET /test/ HTTP/1.1
Le dimensioni della riga della richiesta sono
~19 bytespoiché contiene19 ASCII characters. Poiché rientra nel limite consentito in Apigee Edge, la richiesta viene elaborata senza errori e ricevi una risposta riuscita. - Allo stesso modo, se esamini
faultstringnel messaggio di errore mostrato sopra, contiene"request line size exceeding 7,168". Ciò indica che la riga della richiesta nella richiesta HTTP effettuata dal client ha superato 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 sono maggiori del limite consentito | Le dimensioni dell'URI della richiesta inviato dall'applicazione client come parte della richiesta HTTP ad Apigee Edge sono maggiori del limite consentito in Apigee Edge. | Utenti di Edge Public 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:
- Accedi all'interfaccia utente 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 l'intervallo di tempo specifico in cui hai osservato gli errori.
- Traccia Codice di errore rispetto a Ora.
- Seleziona una cella con il codice di errore
protocol.http.TooBigLinee codice di stato414, come mostrato di seguito:( visualizza un'immagine più grande)
Verranno visualizzate le informazioni sul codice di errore
protocol.http.TooBiglinecome mostrato di seguito:( visualizza un'immagine più grande)
Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita:
( visualizza un'immagine più grande)
Nella finestra Log, prendi nota dei seguenti dettagli:
- Codice di stato:
414 - Origine dell'errore:
apigee - Codice di errore:
protocol.http.TooBigLine. - Lunghezza della richiesta(byte):
7244 (> 7KB)
- Codice di stato:
- Se Origine dell'errore ha il valore
apigeeoMP, Codice di errore ha il valoreprotocol.http.TooBigLinee Lunghezza della richiesta è maggiore di 7 KB, significa che la richiesta HTTP del client ha un URI della richiesta maggiore del limite consentito in Apigee.
Strumento Traccia
NGINX
Per diagnosticare l'errore utilizzando i log degli accessi NGINX:
- Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi NGINX per
determinare le informazioni chiave sugli errori HTTP
414. Controlla i log degli accessi NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.
- Cerca per verificare se si sono verificati errori
414durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con414. Se trovi errori
414con X-Apigee-fault-code corrispondente al valore diprotocol.http.TooBigLine, 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.TooBigLineX-Apigee-fault-source policyNota la lunghezza della richiesta:
7244(7,244 KB > limite consentito)
Causa: le dimensioni del payload della richiesta sono maggiori del limite consentito
Diagnosi
- Determina il codice di errore, l'origine dell'erroio e le dimensioni della lunghezza della richiesta per l' errore osservato utilizzando il monitoraggio delle API, lo strumento Traccia o i log degli accessi NGINX, come spiegato in Passaggi comuni per la diagnosi.
- Se Origine dell'errore ha il valore
apigeeoMP, significa che le dimensioni della richiesta inviata dall'applicazione client ad Apigee sono maggiori del 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 la convalida utilizzando il messaggio di errore:
Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, allora consulta
faultstring. Ilfaultstringindica che le dimensioni della riga della richiesta hanno superato il limite consentito di 7 KB.Messaggio di errore di esempio:
"faultstring":"request line size exceeding 7,168"
Richiesta effettiva
Per la convalida utilizzando la richiesta effettiva:
Se hai accesso alla richiesta effettiva effettuata dall'applicazione client, segui questi passaggi:
- Verifica le dimensioni dell'URI passato nella richiesta.
Se le dimensioni dell'URI sono maggiori del limite consentito in Apigee Edge, 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è maggiore di 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 le dimensioni della riga della richiesta inviata ad Apigee Edge.
Log del processore di messaggi
Per 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 della riga della 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 verificare se si sono verificati errori
414durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con414. Puoi utilizzare le seguenti stringhe di ricerca.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Troverai righe da
system.logsimili 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,168nel messaggio di errore riportato sopra indica che le dimensioni dell'URI della richiesta sono maggiori di 7 KB. Di conseguenza, Apigee Edge genera l'eccezionecom.apigee.errors.http.user.RequestURITooLonge restituisce il codice di stato414con il codice di erroreprotocol.http.TooBiglinealle applicazioni client.
Risoluzione
Dimensioni fisse
Opzione 1 [consigliata]: correggi l'applicazione client in modo che non invii un URI della richiesta di dimensioni maggiori del limite consentito
- Analizza il motivo per cui il client specifico invia un URI della richiesta di dimensioni maggiori del limite consentito, come definito in Limiti.
Se non è auspicabile, modifica l'applicazione client in modo che invii un URI della richiesta di dimensioni 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é come parte dell'URL della richiesta, come mostrato di seguito:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- Se è auspicabile e vuoi inviare un URI maggiore del limite consentito, vai alle opzioni successive.
CwC
Opzione 2 : utilizza la proprietà CwC per aumentare il limite della riga della richiesta
Apigee fornisce una proprietà CwC che consente di aumentare il limite delle 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 righe di richiesta/risposta le cui dimensioni siano maggiori del limite consentito, come documentato per Limite della riga di richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente di Public Cloud, il limite massimo per le dimensioni della riga di richiesta e risposta è documentato per Dimensioni della riga di richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente di Private Cloud, potresti aver modificato il limite massimo predefinito per le dimensioni della riga di richiesta e risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo delle dimensioni della riga della richiesta seguendo le istruzioni riportate in Come controllare il limite attuale.
Come controllare 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.
- Nella macchina del processore di messaggi, cerca la proprietà
HTTPRequest.line.limitnella/opt/apigee/edge-message-processor/confdirectory e controlla il valore 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 valore7kinhttp.properties.Ciò indica che il limite per le dimensioni della riga della richiesta configurato in Apigee per Private Cloud è di 7 KB.
Se hai ancora bisogno dell'assistenza di Apigee, vai a Informazioni di diagnostica da raccogliere.
Informazioni di diagnostica da raccogliere
Raccogli le seguenti informazioni di diagnostica e contatta l'assistenza Apigee Edge:
Se sei un utente di Public Cloud, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome del proxy API
- Comando
curlcompleto utilizzato per riprodurre l'errore414 - 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
curlcompleto utilizzato per riprodurre l'errore414 Log degli accessi NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDove: 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