Memorizzazione nella cache di contenuti basati su parametri delle stringhe di query
Alcune applicazioni Web utilizzano stringhe di query per inviare informazioni al server di origine. Una stringa di query è la parte di una richiesta Web che viene visualizzata dopo un carattere ?; la stringa può contenere uno o più parametri, separati da caratteri &. Nell’esempio che segue, la stringa di query include due parametri, colore = rosso e dimensioni = grandi:
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large
Per le distribuzioni, puoi scegliere se desideri che CloudFront inoltri le stringhe di query all’origine e se vuoi memorizzare nella cache i contenuti in base a tutti i parametri o ai parametri selezionati. Perché questo potrebbe essere utile? Analizza l’esempio seguente.
Supponiamo che il tuo sito Web sia disponibile in cinque lingue. La struttura delle directory e i nomi dei file per le cinque versioni del sito Web sono identiche. Quando un utente visualizza il sito web, le richieste inoltrate a CloudFront; includono un parametro della stringa di query relativa alla lingua in base alla lingua che l’utente ha scelto. Puoi configurare CloudFront in modo che inoltri le stringhe di query al server di origine e memorizzi nella cache in base al parametro della lingua. Se configuri il server Web per restituire la versione di una determinata pagina che corrisponda alla lingua selezionata, CloudFront memorizza nella cache ciascuna versione di lingua separatamente, in base al valore del parametro della stringa di query relativo alla lingua.
In questo esempio, se la pagina principale del sito Web è main.html, le seguenti cinque richieste comporteranno la memorizzazione nella cache da parte di main.html di CloudFront per cinque volte, una volta per ogni valore del parametro della stringa di query relativa alla lingua:
-
https://d111111abcdef8.cloudfront.net/main.html?language=de -
https://d111111abcdef8.cloudfront.net/main.html?language=en -
https://d111111abcdef8.cloudfront.net/main.html?language=es -
https://d111111abcdef8.cloudfront.net/main.html?language=fr -
https://d111111abcdef8.cloudfront.net/main.html?language=jp
Tieni presente quanto segue:
-
Alcuni server HTTP non elaborano parametri delle stringhe di query e, di conseguenza, non restituiscono diverse versioni di un oggetto in base ai valori dei parametri. Per queste origini, se configuri CloudFront in modo da inoltrare i parametri delle stringhe di query all’origine, CloudFront continua a memorizzare nella cache in base ai valori dei parametri anche se l’origine restituisce a CloudFront versioni identiche dell’oggetto per ogni valore di parametro.
-
Affinché i parametri delle stringhe di query funzionino come descritto nell’esempio precedente con le lingue, devi utilizzare il carattere
&come delimitatore tra i parametri delle stringhe di query. Se utilizzi un delimitatore diverso, puoi ottenere risultati imprevisti, a seconda dei parametri che specifichi vengano utilizzati da CloudFront come base per la memorizzazione nella cache, nonché dall’ordine in cui i parametri vengono visualizzati nella stringa di query.Negli esempi seguenti viene mostrato cosa accade se utilizzi un delimitatore diverso e configuri CloudFront per la memorizzazione nella cache solo in base al parametro
color:-
Nella richiesta che segue, CloudFront memorizza nella cache i contenuti in base al valore del parametro
color, ma CloudFront interpreta il valore comered;size=large:https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red;size=large -
Nella seguente richiesta, CloudFront memorizza nella cache i contenuti, ma basa il caching sui parametri della stringa di query. Questo perché hai configurato CloudFront in modo che memorizzi nella cache in base al parametro
color, ma CloudFront interpreta la stringa seguente come contenente solo un parametrosizeche ha un valore dilarge;color=red:https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large;color=red
-
È possibile configurare CloudFront in modo che esegua una delle seguenti operazioni:
-
Non inoltrare le stringhe di query al server di origine. Se non inoltri le stringhe di query, CloudFront non memorizza nella cache in base ai parametri della stringa di query.
-
Inoltra le stringhe di query al server di origine e memorizza nella cache in base a tutti i parametri della stringa di query.
-
Inoltra le stringhe di query al server di origine e memorizza nella cache in base a parametri specifici della stringa di query.
Per ulteriori informazioni, consulta Ottimizzazione del caching.
Argomenti
Impostazioni della console e delle API per l’inoltro delle stringhe di query e per la memorizzazione nella cache
Quando crei una distribuzione nella console CloudFront, CloudFront configura l’inoltro delle stringhe di query e il caching in base al tipo di origine. Facoltativamente, puoi modificare manualmente queste impostazioni. Per ulteriori informazioni, consulta le impostazioni seguenti nella Riferimento a tutte le impostazioni di distribuzione:
Per configurare l’inoltro e la memorizzazione nella cache delle stringhe di query con l’API CloudFront, consulta CachePolicy e OriginRequestPolicy nella Documentazione di riferimento delle API di Amazon CloudFront.
Ottimizzazione del caching
Quando si configura CloudFront in modo che memorizzi nella cache in base ai parametri delle stringhe di query, è possibile eseguire la procedura seguente per ridurre il numero di richieste inoltrate all’origine da CloudFront. Quando le edge location CloudFront forniscono gli oggetti, si riduce il carico sul server di origine e si riduce la latenza perché gli oggetti vengono forniti da posizioni più vicine agli utenti.
- Cache basata solo su parametri per i quali la tua origine restituisce versioni diverse di un oggetto
-
Per ogni parametro della stringa di query che la tua applicazione web inoltra a CloudFront, CloudFront inoltra richieste al tuo server di origine per ogni valore di parametro e memorizza nella cache una versione separata dell’oggetto per ogni valore di parametro. Ciò è valido anche se il server di origine restituisce sempre lo stesso oggetto indipendentemente dal valore di parametro. Per più parametri, il numero di richieste e di oggetti si moltiplicano.
Ti consigliamo di configurare CloudFront in modo che memorizzi nella cache solo in base ai parametri della stringa di query per i quali l’origine restituisce versioni differenti e di valutare attentamente i vantaggi del caching in base a ciascun parametro. Supponiamo ad esempio che tu abbia un sito Web di vendita al dettaglio. Disponi delle immagini di una giacca in sei colori diversi e la giacca è disponibile in dieci taglie diverse. Le immagini che hai della giacca mostrano i diversi colori, ma non le differenti taglie. Per ottimizzare la memorizzazione nella cache, dovresti configurare CloudFront in modo che memorizzi nella cache solo in base al parametro colore e non in base al parametro taglia. In questo modo, si aumenta la probabilità che CloudFront possa servire una richiesta dalla cache e di conseguenza si migliorano le prestazioni e si riduce il carico sull’origine.
- Elenca sempre i parametri nello stesso ordine
-
L’ordine dei parametri è importante in materia di stringhe di query. In questo esempio, le stringhe di query sono identiche, anche che i parametri sono in ordine diverso. Per questo motivo CloudFront inoltra due richieste separate per image.jpg all’origine e memorizza nella cache due versioni diverse dell’oggetto:
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large -
https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large&color=red
Ti consigliamo sempre di elencare i nomi dei parametri nello stesso ordine, seguendo, ad esempio, l’ordine alfabetico.
-
- Usa sempre lo stesso formato per nomi e valori di parametri
-
CloudFront considera il formato dei nomi e dei valori dei parametri in caso di caching in base ai parametri della stringa di query. In questo esempio, le stringhe di query sono identiche, eccetto per il formato dei nomi e dei valori dei parametri. Per questo motivo CloudFront inoltra quattro richieste separate per image.jpg all’origine e memorizza nella cache quattro versioni diverse dell’oggetto:
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red -
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=Red -
https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=red -
https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=Red
Ti consigliamo di usare lo stesso formato, maiuscolo o minuscolo, per i nomi e i valori dei parametri, ad esempio tutte in minuscolo.
-
- Non utilizzare nomi di parametri in conflitto con URL firmati
-
Se usi URL firmati per limitare l’accesso ai tuoi contenuti (se hai aggiunto firmatari attendibili alla distribuzione), CloudFront rimuove i seguenti parametri della stringa di query prima di inoltrare il resto dell’URL al server di origine:
-
Expires -
Key-Pair-Id -
Policy -
Signature
Se usi URL firmati e desideri configurare CloudFront per inoltrare le stringhe di query al server di origine, i parametri della stringa di query non possono essere denominati
Expires,Key-Pair-Id,PolicyoSignature. -
Parametri della stringa di query e log standard CloudFront (log di accesso)
Se abiliti i log, CloudFront registrerà l’URL completo, inclusi i parametri delle stringhe di query. Questo avviene anche se hai configurato CloudFront in modo che inoltri le stringhe di query al server di origine. Per ulteriori informazioni sulla registrazione di CloudFront, consulta Registrazione di log standard (log di accesso).