2014-10-28 7 views
12

Ho un'applicazione singola pagina (angular-js) che viene servita tramite IIS. Come posso evitare il caching di file HTML? La soluzione deve essere raggiunta modificando il contenuto all'interno di index.html o web.config, poiché l'accesso a IIS tramite una console di gestione non è possibile.Come disabilitare il caching del file HTML dell'applicazione singola pagina servito tramite IIS?

Alcune opzioni sto attualmente indagando sono:

IIS è versione 7.5 con .NET framework 4

+0

Allora, qual è il punto di domanda domanda – harishr

+0

aggiunto per voi. – Andrew

+0

Ma hai già la risposta nei link forniti da te ... il collegamento dice come disabilitare la memorizzazione nella cache senza toccare iis, quindi cos'altro vuoi sapere? – harishr

risposta

23

aggiunta dei seguenti nella soluzione web.config lavorato in Chrome, IE, Firefox e Safari:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <location path="index.html"> 
    <system.webServer> 
     <httpProtocol> 
     <customHeaders> 
      <add name="Cache-Control" value="no-cache" /> 
     </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
    </location> 

</configuration> 

Questo farà sì che il che Cache-Control intestazione è impostata al momento della richiesta no-cacheindex.html.

+14

penso che questo funziona solo quando colpisce un URL che è direttamente index.html in esso .. tutte le richieste in una ZPS hanno URL virtuali e non mappa di percorsi di posizione reali. Cosa si può fare con quello? –

5

Quando si servono i file html, è possibile aggiungere una stringa di query casuale. Ciò impedirà al browser di utilizzare le versioni precedenti anche se il file si trova nella cache del browser.

/index.html?rnd=timestamp 

L'altra opzione è quella di aggiungere l'impostazione no-cache a livello di IIS. Ciò aggiunge Cache-Control: no-cache nella risposta che indica ai browser di non memorizzare nella cache il file. Funziona da IIS 7 in poi.

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <!-- Note the use of the 'location' tag to specify which 
     folder this applies to--> 
    <location path="index.html"> 
    <system.webServer> 
     <staticContent> 
     <clientCache cacheControlMode="DisableCache" /> 
     </staticContent> 
    </system.webServer> 
    </location> 
</configuration> 
+0

Riguardo all'aggiunta di un timestamp all'URL, sì, funzionerebbe, ma vedo questo più come un trucco temporaneo che come una soluzione. Non credo che nessuna soluzione SPA stimabile utilizzi questo metodo. – Andrew

+0

ok, aggiunto come si può fare usando IIS stesso. – govin

+3

Questa soluzione non funziona per Google Chrome. – Andrew

4

Per .NET Core, ho utilizzato quanto segue.

 app.UseStaticFiles(new StaticFileOptions 
     { 
      OnPrepareResponse = context => 
      {     
       if (context.File.Name == "index.html") { 
        context.Context.Response.Headers.Add("Cache-Control", "no-cache, no-store"); 
        context.Context.Response.Headers.Add("Expires", "-1"); 
       } 
      } 
     }); 

credito al How to disable browser cache in ASP.NET core rc2?

Problemi correlati