In uno scenario in cui dobbiamo garantire un'alta scalabilità, e magari non abbiamo a disposizione una CDN, il modo migliore per limitare il numero delle richieste al server è quello di abilitare il caching client side dei contenuti statici, quali file JavaScript o CSS.
Questo porta benefici non solo a noi, come gestori del sito web, ma anche ai nostri visitatori, visto che il loro browser tenderà a riutilizzare questi file senza che venga effettuata alcuna richiesta HTTP.
Questa funzionalità è facilmente attivabile in ASP.NET Core nel file startup.cs:
app.UseStaticFiles(new StaticFileOptions() { OnPrepareResponse = x => x.Context.Response.Headers.Add( HeaderNames.CacheControl, "public,max-age=86400") });
In questo modo, infatti, stiamo istruendo il middleware responsabile di servire file statici di aggiungere alla risposta un header di tipo cache-control con i seguenti valori:
- public indica che la risorsa è da considerarsi pubblica, e pertanto può essere memorizzata dal browser nella cache locale e condivisa con tutte le sessioni;
- max-age=86400 specifica che questo contenuto può essere mantenuto in cache per i successivi 86400 secondi, ossia 24 ore.
Il risultato sarà che, per ogni file statico che serviremo, per esempio un file JavaScript, esso rimarrà in memoria per 24 ore sul browser client, che così non dovrà scaricarlo nelle successive richieste.
Sebbene questo strumento funzioni egregiamente, esso presenta un problema nel momento in cui modifichiamo il file, perché normalmente i client non avranno alcuna informazione in merito e pertanto continueranno a utilizzare la versione vecchia. Un trucco per poter risolvere questo problema è quello di appendere al nome del file una querystring fittizia (/myfile.js?aaa=bbbccc), che possiamo variare a piacimento.
ASP.NET Core supporta in maniera automatizzata questo scenario grazie a un tag helper che si appoggia al tag html script:
<script src="~/js/myfile.js" asp-append-version="true"></script>
Grazie all'attributo asp-append-version="true", ASP.NET calcolerà in automatico un hash in base al contenuto del file, e lo aggiungerà in querystring:
<script src="/js/myfile.js?v=nlqvGfU..."></script>
Al variare del contenuto, varierà anche l'hash, producendo a tutti gli effetti un nuovo URL e facendo pertanto sì che i browser non possano più utilizzare quanto messo in cache in precedenza.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
C# 12: Cosa c'è di nuovo e interessante
Utilizzare Azure Cosmos DB con i vettori
Utilizzare una qualunque lista per i parametri di tipo params in C#
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Creare una libreria CSS universale: Nav menu
Testare l'invio dei messaggi con Event Hubs Data Explorer
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Gestione degli stili CSS con le regole @layer
Creare una libreria CSS universale: Clip-path
Escludere alcuni file da GitHub Secret Scanning
Sfruttare al massimo i topic space di Event Grid MQTT
Criptare la comunicazione con mTLS in Azure Container Apps