Errore di buffer nell'intestazione del messaggio HTTP

Impossibile accedere ad alcune pagine di Adobe Experience Manager

Non riesci ad accedere ad alcune pagine e nei registri compare il seguente errore:

servletengine Richiesta non valida. com.day.j2ee.servletengine.BadRequestException: la linea di richiesta supera 8192 byte.

Soluzioni

Se l'intestazione dei messaggi HTTP ad un server AEM è ripetutamente troppo grande, ecco un paio di cose che puoi fare per risolvere il problema.

In AEM/CQ puoi aumentare la dimensione del buffer di intestazione.

Per aumentare le dimensioni del buffer dell'intestazione all'interno di CQ 5.5, ottieni il pacchetto di funzionalità NPR-2324 da Adobe. Questo pacchetto di funzionalità aggiunge un campo Dimensione del buffer dell'intestazione alla configurazione OSGi del servizio Day CQSE HTTP. Il campo da modificare è "Buffer Request Size" (Dimensione buffer richieste) (org.apache.felix.http.cqse.requestBufferSize).

In AEM 5.6, il pacchetto di funzionalità non è necessario. La stessa configurazione aggiunta dal pacchetto di funzionalità per CQ 5.5 è già disponibile.

Il server è stato cambiato per AEM 6+. La configurazione da modificare è all'interno della configurazione del servizio HTTP di Apache Felix basata su Jetty. I campi da modificare sono "Request Buffer Size" e "Response Buffer Size" (org.apache.felix.felix.http.jetty.requestBufferSize e org.apache.felix.http.jetty.responseBufferSize).

Se l'istanza AEM è in esecuzione all'interno di un server di applicaizone JEE, non utilizza il server Web integrato. Modifica la dimensione dell'intestazione del buffer all'interno delle configurazioni del server dell'applicazione.

Mentre la specifica HTTP non pone un limite massimo alle intestazioni dei messaggi, se sono necessari più di 24k per le dimensioni del buffer delle intestazioni HTTP, è necessaria un'altra soluzione. Più grande è la dimensione del buffer dell'intestazione, maggiore è la quantità di memoria che ogni socket HTTP aperto richiederà. Questo include i socket che sono in attesa di una connessione. Ogni socket richiede che la memoria venga sempre assegnata ad esso, sia per le intestazioni dei messaggi di richiesta che per le intestazioni dei messaggi di risposta. Aumentando drasticamente la dimensione dell'intestazione del messaggio otterrai un effetto diretto sulla quantità di memoria heap minima che AEM deve avere per funzionare.

Se l'URL per le richieste è troppo grande a causa della dimensione degli argomenti dell'URL, cambia le richieste per usare il metodo POST invece di GET. I parametri per le richieste GET si aggiungono alla dimensione dell'intestazione del messaggio. I parametri per le richieste POST, invece, vengono aggiunti al contenuto del messaggio.

Se la dimensione dei cookie fa sì che l'intestazione del messaggio sia troppo grande, considera la possibilità di eliminare le informazioni memorizzate nei cookie o di memorizzare i dati in un altro modo. Gli oggetti di archiviazione Web del browser non fanno aumentare le dimensioni delle intestazioni dei messaggi. Il ClientContext all'interno di AEM può, nel tempo, richiedere una grande quantità di dati salvati. Per impostazione predefinita, le versioni successive di AEM utilizzano oggetti di archiviazione Web per i dati del ClientContext. Le versioni precedenti inseriscono i dati del ClientContext utilizzando i cookie. Per informazioni su come modificare il modo in cui i dati vengono memorizzati, vedi ClientContext in dettaglio.

Informazioni aggiuntive

AEM/CQ ha un buffer per il contenuto dell'intestazione della richiesta HTTP. Il contenuto delle intestazioni di richiesta e di risposta HTTP deve rientrare nel buffer. In CQ 5.5 e AEM 5.6, la dimensione predefinita di questo buffer è 8k. La dimensione predefinita del buffer di intestazione è maggiore in AEM 6.

Tutti i messaggi HTTP hanno due parti, l'intestazione e il corpo del messaggio.

Il corpo del messaggio contiene tutte le informazioni considerate come il contenuto del messaggio. Esempi di corpo del messaggio sono il testo HTML di una pagina Web o il numero binario di un'immagine. Per i messaggi HTTP che utilizzano richieste POST, il corpo del messaggio può contenere i parametri della richiesta POST.

L'intestazione contiene informazioni sulla richiesta o sulla risposta. Questo include il metodo HTTP utilizzato e l'URL richiesto. Per i messaggi di risposta HTTP, è incluso anche lo stato HTTP per la risposta. Altre informazioni sul messaggio HTTP possono essere incluse sotto forma di coppie chiave/valore che sono chiamate campi di intestazione. I cookie del browser vengono inviati e ricevuti come coppie chiave/valore anche all'interno delle intestazioni dei messaggi.

L'intestazione di un messaggio deve essere valutata al momento della ricezione e viene elaborata nella sua interezza prima che il server o il browser agisca sul contenuto del messaggio. AEM legge l'intestazione del messaggio HTTP in un buffer che deve essere abbastanza grande da contenere l'intera intestazione. Se il contenuto dell'intestazione di un messaggio HTTP è troppo grande per essere inserito nel buffer, il messaggio fallisce.

Ci sono alcune condizioni che possono far sì che l'intestazione del messaggio HTTP sia troppo grande per adattarsi al buffer del server. Ognuna di queste condizioni può far sì che l'HTTP sia troppo grande, da sola o combinata con altre.

L'URL di una richiesta può essere troppo lungo per il buffer. Questo può accadere, per esempio, quando una richiesta ha centinaia di argomenti URL. Oppure quando i singoli argomenti URL sono di dimensioni particolarmente grandi.

Le informazioni salvate nei cookie possono aumentare fino al punto di impedire all'intestazione di inserirsi nel buffer dell'intestazione del server. Questo problema può essere causato da molti cookie di piccole dimensioni o da pochi cookie di dimensioni particolarmente grandi.

Gli sviluppatori possono creare campi di intestazione personalizzati. Spesso le implementazioni Single Sign-On utilizzano campi di intestazione personalizzati. Poiché la dimensione dei valori nei campi di intestazione non è limitata nelle specifiche HTTP, gli sviluppatori possono creare campi di intestazione con una grande quantità di contenuti.

Contenuto correlato

Specifiche del messaggio HTTP 
Specifiche di archiviazione Web HTTP

Logo Adobe

Accedi al tuo account