Jestem za ostatecznym odniesieniem do tego, jaki kod ASP.NET jest wymagany, aby wyłączyć buforowanie strony przez przeglądarki. Istnieje wiele sposobów wpływania na nagłówki HTTP i metatagi i wydaje mi się, że różne ustawienia są wymagane, aby różne przeglądarki działały poprawnie. Byłoby naprawdę wspaniale, gdybyśmy skomentowali fragment kodu odniesienia, aby wskazać, który działa dla wszystkich przeglądarek, a który jest wymagany dla określonej przeglądarki, w tym wersji.
Jest tam mnóstwo informacji na temat tego problemu, ale nie znalazłem jeszcze dobrego odniesienia opisującego zalety każdej metody i czy dana technika została zastąpiona przez API wyższego poziomu.
Szczególnie interesuje mnie ASP.NET 3.5 SP1, ale dobrze byłoby uzyskać odpowiedzi również na wcześniejszą wersję.
W tym wpisie na blogu Dwie ważne różnice między przeglądarką Firefox a buforowaniem przeglądarki IE opisano niektóre różnice w zachowaniu protokołu HTTP.
Poniższy przykładowy kod ilustruje rodzaj rzeczy, które mnie interesują
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));
}
}