Deshabilitar el almacenamiento en caché del navegador para todos los navegadores desde ASP.NET




http browser (4)

Estoy buscando una referencia definitiva de qué código ASP.NET se requiere para que los navegadores deshabilitados guarden en caché la página. Hay muchas maneras de afectar los encabezados HTTP y metaetiquetas y me da la impresión de que se requieren diferentes configuraciones para que los diferentes navegadores se comporten correctamente. Sería realmente genial obtener un código de referencia de comentario para indicar qué funciona para todos los navegadores y qué se requiere para un navegador en particular, incluidas las versiones.

Existe una gran cantidad de información sobre este tema, pero aún no he encontrado una buena referencia que describa los beneficios de cada método y si una técnica particular ha sido reemplazada por una API de nivel superior.

Estoy particularmente interesado en ASP.NET 3.5 SP1, pero también sería bueno obtener respuestas para versiones anteriores.

Esta entrada de blog Dos importantes diferencias entre Firefox e IE Caching describe algunas diferencias de comportamiento del protocolo HTTP.

El siguiente código de ejemplo ilustra el tipo de cosa que me interesa

public abstract class NoCacheBasePage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        DisableClientCaching();
    }

    private void DisableClientCaching()
    {
        // Do any of these result in META tags e.g. <META HTTP-EQUIV="Expire" CONTENT="-1">
        // HTTP Headers or both?

        // Does this only work for IE?
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        // Is this required for FireFox? Would be good to do this without magic strings.
        // Won't it overwrite the previous setting
        Response.Headers.Add("Cache-Control", "no-cache, no-store");

        // Why is it necessary to explicitly call SetExpires. Presume it is still better than calling
        // Response.Headers.Add( directly
        Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
    }
}

Consulte también ¿Cómo evitar que google chrome guarde en caché mis entradas, especialmente las ocultas cuando el usuario hace clic atrás? sin el cual Chrome podría recargar pero preservar el contenido anterior de <input> elementos <input> ; en otras palabras, use autocomplete="off" .


Esto es lo que usamos en ASP.NET:

// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox
Response.Cache.SetNoStore();

Deja de almacenar en la memoria caché en Firefox e IE, pero no hemos probado otros navegadores. Los siguientes encabezados de respuesta se agregan mediante estas declaraciones:

Cache-Control: no-cache, no-store
Pragma: no-cache

Por lo que vale, solo tuve que manejar esto en mi aplicación ASP.NET MVC 3. Aquí está el bloque de código que utilicé en el archivo Global.asax para manejar esto para todas las solicitudes.

    protected void Application_BeginRequest()
    {
        //NOTE: Stopping IE from being a caching whore
        HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        HttpContext.Current.Response.Cache.SetNoStore();
        Response.Cache.SetExpires(DateTime.Now);
        Response.Cache.SetValidUntilExpires(true);
    }

Probé varias combinaciones y las fallé en Firefox. Ha pasado un tiempo, por lo que la respuesta anterior puede funcionar bien o puede haber perdido algo.

Lo que siempre me ha funcionado es agregar lo siguiente al encabezado de cada página, o la plantilla (página maestra en .net).

<script language="javascript" type="text/javascript">
    window.onbeforeunload = function () {   
        // This function does nothing.  It won't spawn a confirmation dialog   
        // But it will ensure that the page is not cached by the browser.
    }  
</script>

Esto ha desactivado todo el almacenamiento en caché en todos los navegadores para mí sin falta.





caching