asp.net - publicar - ¿Cómo deshabilitar el almacenamiento en caché del archivo HTML de la aplicación de una sola página servido a través de IIS?
publicar sitio web en iis (4)
Tengo una aplicación de una sola página (angular-js) que se sirve a través de IIS. ¿Cómo evito el almacenamiento en caché de archivos HTML? La solución debe lograrse cambiando el contenido dentro de index.html o web.config, ya que el acceso a IIS a través de una consola de administración no es posible.
Algunas de las opciones que estoy investigando actualmente son:
- Perfiles de almacenamiento en caché web.config - http://www.iis.net/configreference/system.webserver/caching
- web.config caché de cliente - http://www.iis.net/configreference/system.webserver/staticcontent/clientcache
- metaetiquetas: ¿ utiliza etiquetas <meta> para desactivar el almacenamiento en caché en todos los navegadores?
IIS es la versión 7.5 con .NET framework 4
Agregando lo siguiente en la solución web.config funcionó en Chrome, IE, Firefox y 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>
Esto asegurará que el encabezado de Cache-Control
se establezca en no-cache
al solicitar index.html
.
Al servir sus archivos html, puede agregar una cadena de consulta aleatoria. Esto evitará que el navegador use las versiones anteriores, incluso si el archivo está en el caché del navegador.
/index.html?rnd=timestamp
La otra opción es agregar la configuración de no caché en el nivel de IIS. Esto agrega Cache-Control: no-cache en la respuesta que le dice a los navegadores que no guarden el archivo. Funciona desde IIS 7 en adelante.
<?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>
Para .NET Core, utilicé lo siguiente.
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");
}
}
});
Crédito a ¿Cómo deshabilitar el caché del navegador en ASP.NET core rc2?
<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0">