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

Busco una referencia definitiva sobre qué código ASP.NET se requiere para deshabilitar los navegadores para que no almacenen en la memoria caché de la página. Hay muchas maneras de afectar los encabezados HTTP y las metaetiquetas y tengo la impresión de que se requieren diferentes configuraciones para que los diferentes navegadores se comporten correctamente. Sería realmente genial que se comentara un bit de código de referencia para indicar cuál funciona para todos los navegadores y cuál se requiere para un navegador en particular, incluidas las versiones.

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

Estoy particularmente interesado en ASP.NET 3.5 SP1 pero sería bueno obtener respuestas para la versión anterior también.

Esta entrada de blog Dos diferencias importantes entre Firefox y el almacenamiento en caché de IE describe algunas diferencias de comportamiento del protocolo HTTP.

El siguiente código de muestra ilustra el tipo de cosas en las que estoy interesado

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));
    }
}

Respuestas a la pregunta(12)

Su respuesta a la pregunta