Saya mencari referensi pasti tentang kode ASP.NET apa yang diperlukan untuk menonaktifkan browser dari cache halaman. Ada banyak cara untuk mempengaruhi header HTTP dan meta tag dan saya mendapat kesan bahwa pengaturan yang berbeda diperlukan untuk membuat browser yang berbeda berperilaku dengan benar. Akan sangat bagus untuk mendapatkan sedikit referensi kode yang dikomentari untuk menunjukkan mana yang berfungsi untuk semua browser dan mana yang diperlukan untuk browser tertentu, termasuk versi.
Ada banyak sekali informasi tentang masalah ini di sana, tetapi saya belum menemukan referensi bagus yang menjelaskan manfaat dari setiap metode dan apakah teknik tertentu telah digantikan oleh API tingkat yang lebih tinggi.
Saya sangat tertarik dengan ASP.NET 3.5 SP1 tetapi akan lebih baik untuk mendapatkan jawaban untuk versi sebelumnya juga.
Entri blog ini Dua Perbedaan Penting antara Firefox dan Caching IE menjelaskan beberapa perbedaan perilaku protokol HTTP.
Kode contoh berikut menggambarkan jenis hal yang saya minati
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));
}
}
Jawaban:
Inilah yang kami gunakan di ASP.NET:
// Stop Caching in IE Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); // Stop Caching in Firefox Response.Cache.SetNoStore();
Ini menghentikan cache di Firefox dan IE, tetapi kami belum mencoba browser lain. Header respons berikut ditambahkan oleh pernyataan ini:
Cache-Control: no-cache, no-store Pragma: no-cache
sumber
SetCacheability
.SetNoStore
adalah solusi IE6. Lihat Mengapa no-cache dan no-store harus digunakan dalam respons HTTP? .Untuk apa nilainya, saya hanya harus menangani ini di aplikasi ASP.NET MVC 3 saya. Berikut adalah blok kode yang saya gunakan di file Global.asax untuk menangani ini untuk semua permintaan.
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); }
sumber
HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false)
membuat perbedaan untuk mencegah caching di bith IE dan FireFoxSaya telah mencoba berbagai kombinasi dan gagal di FireFox. Sudah lama jadi jawaban di atas mungkin berfungsi dengan baik atau saya mungkin melewatkan sesuatu.
Apa yang selalu berhasil bagi saya adalah menambahkan yang berikut ini ke kepala setiap halaman, atau template (Halaman Master di .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>
Ini telah menonaktifkan semua cache di semua browser untuk saya tanpa gagal.
sumber
Ada dua pendekatan yang saya ketahui. Yang pertama adalah memberi tahu browser untuk tidak menyimpan halaman dalam cache. Mengatur Respons ke tidak ada cache mengurus itu, namun karena Anda curiga browser akan sering mengabaikan arahan ini. Pendekatan lainnya adalah menetapkan waktu tanggal tanggapan Anda ke suatu titik di masa mendatang. Saya yakin semua browser akan memperbaiki ini ke waktu saat ini ketika mereka menambahkan halaman ke cache, tetapi itu akan menunjukkan halaman sebagai yang lebih baru ketika perbandingan dibuat. Saya yakin mungkin ada beberapa kasus di mana perbandingan tidak dibuat. Saya tidak yakin dengan detailnya dan mereka berubah dengan setiap rilis browser baru. Catatan terakhir Saya lebih beruntung dengan halaman yang "menyegarkan" sendiri (petunjuk tanggapan lain). Penyegaran tampaknya kecil kemungkinannya berasal dari cache.
Semoga membantu.
sumber
Saya akan menguji menambahkan tag no-store ke situs kami untuk melihat apakah ini membuat perbedaan pada cache browser (Chrome terkadang menyimpan halaman dalam cache). Saya juga menemukan artikel ini sangat berguna pada dokumentasi tentang bagaimana dan mengapa caching bekerja dan akan melihat ETag berikutnya jika no-store tidak dapat diandalkan:
http://www.mnot.net/cache_docs/
http://en.wikipedia.org/wiki/HTTP_ETag
sumber
Lihat juga Bagaimana cara mencegah google chrome dari caching input saya, terutama yang tersembunyi ketika pengguna mengklik kembali? yang tanpanya Chrome dapat memuat ulang tetapi mempertahankan konten
<input>
elemen sebelumnya - dengan kata lain, gunakanautocomplete="off"
.sumber