2009-11-26 19 views
5

Ho una domanda relativa alle tecniche di invalidamento della cache ... Sto cercando di implementare un meccanismo per il mio sito Web, che invalida automaticamente la cache del browser (css, immagini ...). Voglio essere in grado di invalidare in modo programmato la cache del browser, ogni volta che aggiorno il sito Web (cambia le immagini o gli stili);ASP.NET - Invalidate cache del browser

Ad esempio: per la versione corrente, tra gli altri, il css e alcune delle immagini sono cambiati. In questa situazione, voglio che dopo che l'aggiornamento è terminato, quando un utente esegue una richiesta al sito web, la cache del suo browser viene automaticamente invalidata, costringendo così il nuovo download delle nuove immagini e stili. Questo dovrebbe essere fatto solo per la prima richiesta del client ... i seguenti devono essere recuperati dalla cache (quindi l'impostazione del pragma no-cache è fuori questione).

Ecco quello che ho provato: nel gestore di eventi BeginRequest, ho aggiunto le seguenti righe: Response.Cache.SetCacheability (HttpCacheability.ServerAndPrivate); Response.Cache.SetETag ("\" e111293b17594f1487d136ea7e9314ac \ "");

imposta l'ETag nelle intestazioni di risposta. Ho pensato che se cambio questo ETag ad ogni release, e lo metto ad ogni richiesta, la cache sarà invalidata, ma sembra che non lo sia. Ho usato intestazioni HTTP in tempo reale per vedere i risultati e ETAG è impostato correttamente per la risposta, ma il css e le immagini sono ancora presi dalla cache ....

Qualche idea su come potrei realizzare questo, o se può essere realizzato a tutti?

Grazie in anticipo!

risposta

5

Mi sono imbattuto in problemi come questo in passato. Sfortunatamente non sono riuscito a trovare un modo davvero carino per farlo, quindi ho dovuto inventare una soluzione alternativa. Stavo solo a che fare con questo problema per i file CSS così ho aggiunto un parametro querystring in più per ogni riferimento CSS, ad esempio

<link rel="stylesheet" type="text/css" 
     href="default.css?buildnumber=<%= Buildnumber %>" /> 

Il numero di build viene incrementato con ogni uscita in modo che il browser è stato costretto ad andare a cercare questa nuova file. Non è una soluzione ideale, ma ha funzionato senza intoppi.

+0

questa è una buona idea, ma per quanto riguarda le immagini ... non è così facile posizionare una query param per ogni immagine refference nel progetto ... grazie per la risposta – GeoXYZ

+0

Questo dovrebbe ancora funzionare per le immagini. Forse se tutte le tue immagini sono controlli server potresti sovrascrivere un evento pagina, magari onrender, trovare tutte le immagini e aggiungere il parametro url extra – Bob

+0

sì, so che potrei farlo, ma non è una buona pratica ... prima di tutto tutto, penso che dovrei farlo su tutte le pagine con le immagini su di esse (perché non solo la masterpage ha immagini, ma i controlli dell'utente hanno anche immagini all'interno); in secondo luogo, per automatizzare questo processo (non dover adattare il codice ogni volta che aggiungo un altro controllo immagine sulla pagina), dovrei scorrere i controlli della pagina e trovare solo controlli immagine e modificare la proprietà imageurl .. e questo richiede molto tempo soprattutto se il conteggio dei colpi per quel controllo è alto, inducendo un colpo di prestazioni. – GeoXYZ

Problemi correlati