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
Implementare il throttling in ASP.NET Core
Creare gruppi di client per Event Grid MQTT
Disabilitare automaticamente un workflow di GitHub (parte 2)
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Gestire liste di tipi semplici con Entity Framework Core
Eseguire attività pianificate con Azure Container Jobs
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Aggiungere interattività lato server in Blazor 8
Criptare la comunicazione con mTLS in Azure Container Apps
Short-circuiting della Pipeline in ASP.NET Core
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8