Come faccio ad evitare che il mio filmato venga salvato nella cache?

Utente HTML.it
chiede

Come faccio ad evitare che il mio filmato venga salvato nella cache?

Redazione HTML.it
risponde

Non è possibile impedire ad un browser di salvare un swf nella cache. Perchè un filmato sia visibile, deve prima arrivare in locale, nei file temporanei, e da essi essere prelevato per la visualizzazione.

Quindi, se lo scopo di questa ricerca è impedire che qualcuno possa mettere le mani su un swf, si è decisamente fuori strada. l’swf, quando viene visualizzato, è ormai salvo su disco.

Quello che si può fare, invece, è forzare il browser, ogni volta che viene richiesta la pagina, a scaricarla dal server piuttosto che a prelevarla dalla cache: soluzione molto utile quando i file sono soggetti a frequenti aggiornamenti.

La Macromedia, in questa pagina How to prevent caching of swf files, suggerisce un metodo per forzare lo scaricamento, metodo non efficace al 100%. Si tratta di inserire, nell’head della pagina html che contiene il filmato, le seguenti righe:

<!– BEGIN INSERT–>
<META HTTP-EQUIV=”Expires” CONTENT=”Mon, 21
Jan 2000 21:29:02 GMT”>
<META HTTP-EQUIV=”PRAGMA” CONTENT=”NO-CACHE”>
<!– END INSERT–>

La data della seconda riga, rappresenta il momento dopo il quale il browser inizierà a scaricare sempre dal server invece che dalla cache: se la data viene anticipata ad un giorno prima della pubblicazione dei file, la forzatura avverrà da subito.

Esistono però altri metodi, molto più efficaci, e tutti basati sullo stesso concetto di fondo. Aggiungendo al nome del filmato un valore diverso ogni volta che la pagina viene richiesta, si inganna il browser facendo credere che sia un file diverso, e non lo stesso con altro nome. La struttura è questa:

nome_file.swf?valore_diverso

Solitamente, quello che si fa è impostare un valore random, o una data, che darà minime probabilità di fallimento. Vediamo come funziona con diversi linguaggi.

JavaScript

<script language=”JavaScript”>
<!–
document.write(‘<OBJECT classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″‘
+’ codebase=”[…]omissis[…]”‘
+’ ID=name WIDTH=640 HEIGHT=486>’
+’ <PARAM NAME=movie VALUE=”filmato.swf?’ + new Date().getTime() + ‘”>’
+’ <PARAM NAME=loop VALUE=false> <PARAM NAME=bgcolor value=#FFFFFF>’
+’ <PARAM NAME=menu VALUE=false> <PARAM NAME=quality value=high>’
+’ <EMBED src=”filmato.swf?’ + new Date().getTime() + ‘” loop=false ‘
+’ menu=false quality=high bgcolor=#FFFFFF ‘
+’ WIDTH=640 HEIGHT=486 TYPE=”application/x-shockwave-flash”‘
+’ PLUGINSPAGE=”http://www.macromedia.com/go/getflashplayer”>’
+’ </EMBED></OBJECT>’);
//–>
</script>

PHP

<?php
header (“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header (“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);
header (“Cache-Control: no-cache, must-revalidate”);
header (“Pragma: no-cache”);
srand((double)microtime()*1000000);
$randval = rand();
?>

…….

<OBJECT classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″‘
codebase=”[…]omissis[…]”‘ WIDTH=640 HEIGHT=486>’
<PARAM NAME=movie VALUE=”filmato.swf?<?echo $randval;?>”>
<PARAM NAME=loop VALUE=false>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<PARAM NAME=menu VALUE=false>
<PARAM NAME=quality VALUE=high>
<EMBED src=”filmato.swf?<?echo $randval;?>” loop=false menu=false
quality=high bgcolor=#FFFFFF WIDTH=640 HEIGHT=486
type=”application/x-shockwave-flash”
PLUGINSPAGE=”http://www.macromedia.com/go/getflashplayer”>
</EMBED></OBJECT>

ASP

<%@ Language=VBScript Response.CacheControl=”no-cache”
Response.AddHeader “Pragma”,”no-cache”
Response.Expires=0
randomize
rand_n=int(rnd*9999)
%>

…….

<OBJECT classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″‘

codebase=”[…]omissis[…]”‘ WIDTH=640 HEIGHT=486>’
<PARAM NAME=movie VALUE=”filmato.swf?<%=rand_n%>”>
<PARAM NAME=loop VALUE=false>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<PARAM NAME=menu VALUE=false>
<PARAM NAME=quality VALUE=high>
<EMBED src=”filmato.swf?<%=rand_n%>” loop=false menu=false
quality=high bgcolor=#FFFFFF WIDTH=640 HEIGHT=486
type=”application/x-shockwave-flash”
PLUGINSPAGE=”http://www.macromedia.com/go/getflashplayer”>
</EMBED></OBJECT>

Stessa cosa vale per quando si cerca di caricare un XML, o un file di testo, o un filmato. Ad esempio:

loadVariables (“file.txt?a=”+ random);