Bagaimana mengelola caching halaman web di semua browser?

Penelitian kami menunjukkan bahwa tidak semua browser sama-sama menghargai arahan cache http.

Untuk alasan keamanan, kami tidak ingin halaman tertentu dalam aplikasi kami di-cache , oleh browser web. Ini harus berfungsi untuk setidaknya browser berikut:

  • Internet Explorer 6 +
  • Firefox 1.5 +
  • Safari 3+
  • Opera 9 +
  • Chrome

Permintaan kami datang dari tes keamanan. Setelah keluar dari situs kami, Anda dapat mengklik tombol "Kembali" dan melihat halaman yang di-cache.

1257
08 сент. diatur oleh Edward Wilde 08 sept. 2008-09-08 15:08 '08 pada 15:08 2008-09-08 15:08
@ 26 jawaban

Pendahuluan

Kumpulan header minimum yang benar yang bekerja dengan semua klien yang ditentukan (dan proksi):

 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 

Cache-Control mematuhi spesifikasi HTTP 1.1 untuk klien dan proksi (dan secara implisit diperlukan oleh beberapa klien di dekat Expires ). Pragma mematuhi spesifikasi HTTP 1.0 untuk klien prasejarah. Expires mematuhi spesifikasi HTTP 1.0 dan 1.1 untuk klien dan proksi. Di HTTP 1.1, Cache-Control didahulukan dari Expires , jadi itu hanya untuk proksi HTTP 1.0.

Jika Anda tidak peduli tentang IE6 dan caching yang rusak saat melayani halaman melalui HTTPS hanya no-store , maka Anda dapat menghi>Cache-Control: no-cache .

 Cache-Control: no-store, must-revalidate Pragma: no-cache Expires: 0 

Jika Anda tidak tertarik pada klien IE6 dan HTTP 1.0 (HTTP 1.1 diperkenalkan pada 1997), maka Anda dapat menghi>Pragma .

 Cache-Control: no-store, must-revalidate Expires: 0 

Jika Anda tidak memerlukan server proxy HTTP 1.0, Anda dapat menghi>Expires .

 Cache-Control: no-store, must-revalidate 

Di sisi lain, jika server secara otomatis menyertakan header Date valid, maka Anda secara teoritis dapat menghi>Cache-Control dan hanya bergantung pada Expires .

 Date: Wed, 24 Aug 2016 18:32:02 GMT Expires: 0 

Tetapi ini bisa gagal jika, misalnya, pengguna akhir memanipulasi tanggal sistem operasi dan perangkat lunak klien bergantung padanya.

Parameter Cache-Control lainnya seperti max-age tidak masalah jika parameter Cache-Control atas. Header Last-Modified disertakan dalam sebagian besar respons lain hanya menarik jika Anda benar-benar ingin men-cache permintaan, jadi Anda tidak perlu menentukannya sama sekali.

Bagaimana cara menginstalnya?

Menggunakan PHP:

 response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. response.setHeader("Expires", "0"); // Proxies. 

Menggunakan ASP.NET-MVC

 // 'response' is an instance of System.Net.Http.HttpResponseMessage response.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true, NoStore = true, MustRevalidate = true }; response.Headers.Pragma.ParseAdd("no-cache"); // We can't use 'response.Content.Headers.Expires' directly // since it allows only 'DateTimeOffset?' values. response.Content?.Headers.TryAddWithoutValidation("Expires", 0.ToString()); 

Menggunakan ASP.NET:

 Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate" ' HTTP 1.1. Response.addHeader "Pragma", "no-cache" ' HTTP 1.0. Response.addHeader "Expires", "0" ' Proxies. 

Menggunakan Ruby on Rails atau Python / Flask:

 response["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1. response["Pragma"] = "no-cache" # HTTP 1.0. response["Expires"] = "0" # Proxies. 

Menggunakan Python / Piramida:

 responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1. responseWriter.Header().Set("Pragma", "no-cache") // HTTP 1.0. responseWriter.Header().Set("Expires", "0") // Proxies. 

Menggunakan file .htaccess Apache:

 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> 

Tag meta HTML terhadap tajuk respons HTTP

Penting untuk mengetahui bahwa ketika halaman HTML disajikan melalui koneksi HTTP, dan header ada di header respons HTTP dan <meta http-equiv> HTML <meta http-equiv> , maka yang ditentukan dalam header respons HTTP , akan didahulukan dari tag meta HTML. Tag meta HTML hanya akan digunakan ketika halaman dilihat dari sistem file disk lokal melalui file:// URL. Lihat juga bagian W.3 HTML spec 5.2.2 . Berhati-hatilah saat Anda tidak menentukannya secara terprogram, karena server web mungkin menyertakan beberapa nilai default.

Sebagai aturan umum, Anda sebaiknya tidak menentukan tag meta HTML untuk menghindari kebingungan pada bagian permulaan dan mengandalkan header respons HTTP yang keras. Selain itu, <meta http-equiv> ini tidak valid dalam HTML5. Hanya nilai http-equiv tercantum dalam spesifikasi HTML5 yang diizinkan.

Memeriksa tajuk respons HTTP sebenarnya

Untuk menguji keduanya, Anda dapat melihat / men-debug mereka di monitor traffic HTTP kotak alat pengembang webbrowser. Anda dapat mencapainya dengan menekan F12 di Chrome / Firefox23 + / IE9 +, lalu buka tab Network atau No, lalu klik permintaan HTTP yang menarik untuk mengungkapkan semua detail tentang permintaan dan respons HTTP. Di bawah ini adalah tangkapan layar dari Chrome:

2019

2174
15 янв. Jawabannya diberikan oleh BalusC 15 Jan 2010-01-15 02:50 '10 pada 2:50 2010-01-15 02:50

(hei, semuanya: tolong jangan sembarangan menyalin dan menempel semua header yang dapat Anda temukan)

Pertama-tama, sejarah tombol kembali bukanlah cache :

Model kesegaran (Bagian 4.2) tidak selalu berlaku untuk mekanisme sejarah. Yaitu, mekanisme riwayat dapat menampilkan tampilan sebelumnya, bahkan jika telah kedaluwarsa.

Dalam spesifikasi HTTP lama, kata-katanya bahkan lebih kuat, secara eksplisit memberitahu browser untuk mengabaikan arahan cache untuk sejarah tombol.

Pengembalian harus dikembalikan tepat waktu (hingga pengguna masuk). Itu tidak bergerak maju ke URL yang sebelumnya terbuka.

Namun, dalam praktiknya, cache dapat memengaruhi tombol kembali dalam keadaan khusus:

  • Halaman tersebut harus dikirimkan melalui HTTPS , jika tidak, cache yang melimpah ini tidak akan dapat diandalkan. Selain itu, jika Anda tidak menggunakan HTTPS, halaman Anda rentan terhadap pencurian entri untuk berbagai keperluan lainnya.
  • Anda harus mengirim Cache-Control: no-store, must-revalidate (beberapa browser menonton no-store , dan beberapa watch must-revalidate )

Anda tidak akan pernah membutuhkan:

  • <meta> dengan header cache - tidak berfungsi sama sekali. Sama sekali tidak berguna.
  • post-check / pre-check adalah arahan hanya untuk IE yang hanya berlaku untuk sumber daya yang di-cache.
  • Mengirim tajuk yang sama dua atau lusin bagian. Beberapa fragmen PHP sebenarnya menggantikan header sebelumnya, dengan hasil hanya yang terakhir dikirim.

Jika mau, Anda dapat menambahkan:

  • no-cache atau max-age=0 , yang akan membuat sumber daya (URL) "usang" dan akan membutuhkan browser untuk memeriksa dengan server jika versi yang lebih baru ( no-store sudah menyiratkan lebih banyak lagi).
  • Expires dengan tanggal masa lalu untuk klien HTTP / 1.0 (meskipun klien HTTP / 1.0 nyata tidak sepenuhnya ada hari ini).

Bonus: RFC Caching HTTP Baru .

207
31 марта '11 в 2:08 2011-03-31 02:08 jawabannya diberikan oleh Kornel pada 31 Maret '11 di 2:08 2011-03-31 02:08

Seperti yang dinyatakan oleh porneL, Anda ingin tidak menonaktifkan cache, tetapi untuk menonaktifkan buffer sejarah. Browser yang berbeda memiliki cara mereka sendiri yang halus untuk mematikan buffer sejarah.

Di Chrome (v28.0.1500.95 m) kita bisa melakukan ini hanya dengan Cache-Control: no-store .

Di FireFox (v23.0.1), salah satunya akan berfungsi:

  • Cache-Control: no-store

  • Cache-Control: no-cache (hanya https)

  • Pragma: no-cache (hanya https)

  • Vary: * (hanya https)

Di Opera (v12.15), kita dapat melakukan ini hanya dengan Cache-Control: must-revalidate (hanya https).

Di Safari (v5.1.7, 7534.57.2), salah satunya akan berfungsi:

  • Cache-Control: no-store
    <body onunload=""> dalam html

  • Cache-Control: no-store (hanya https)

Di IE8 (v8.0.6001.18702IC), salah satunya akan berfungsi:

  • Cache-Control: must-revalidate, max-age=0

  • Cache-Control: no-cache

  • Cache-Control: no-store

  • Cache-Control: must-revalidate
    Expires: 0

  • Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT

  • Pragma: no-cache (hanya https)

  • Vary: * (hanya https)

Kombinasi di atas memberi kami solusi ini yang berfungsi untuk Chrome 28, FireFox 23, IE8, Safari 5.1.7 dan Opera 12.15: Cache-Control: no-store, must-revalidate (hanya https)

Perhatikan bahwa https diperlukan karena Opera tidak akan menonaktifkan buffer riwayat untuk halaman http sederhana. Jika Anda benar-benar tidak bisa mendapatkan https dan Anda siap untuk mengabaikan Opera, hal terbaik yang dapat Anda lakukan adalah ikuti >

 Cache-Control: no-store <body onunload=""> 

Di bawah ini adalah sumber log pengujian saya:

Http:

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    Kecelakaan: Safari 5.1.7, Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Kecelakaan: Safari 5.1.7, Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: no-store
    Kecelakaan: Safari 5.1.7, Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8

  • Cache-Control: no-store
    <body onunload="">
    Kesalahan: Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  • Cache-Control: no-cache
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Vary: *
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15 Sukses: tidak ada

  • Pragma: no-cache
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15 Sukses: tidak ada

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: must-revalidate, max-age=0
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: must-revalidate
    Expires: 0
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Kecelakaan: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15 Sukses: IE8

  • Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15 Sukses: tidak ada

Https:

  • Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15 Sukses: tidak ada

  • Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15 Sukses: tidak ada

  • Vary: *
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Pragma: no-cache
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Cache-Control: no-cache
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Cache-Control: must-revalidate
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7
    Sukses: Opera 12.15

  • Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    <body onunload="">
    Kesalahan: Chrome 28, FireFox 23, IE8, Safari 5.1.7
    Sukses: Opera 12.15

  • Cache-Control: must-revalidate, max-age=0
    Galat: Chrome 28, FireFox 23, Safari 5.1.7
    Sukses: IE8, Opera 12.15

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Chrome 28, Safari 5.1.7
    Sukses: FireFox 23, IE8, Opera 12.15

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Chrome 28, Safari 5.1.7
    Sukses: FireFox 23, IE8, Opera 12.15

  • Cache-Control: no-store
    Kesalahan: Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  • Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  • Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Kesalahan: Opera 12.15 Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  • Cache-Control: private, no-cache
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Galat: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  • Cache-Control: must-revalidate
    Expires: 0
    Kesalahan: Chrome 28, FireFox 23, Safari 5.1.7,
    Sukses: IE8, Opera 12.15

  • Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Kesalahan: Chrome 28, FireFox 23, Safari 5.1.7,
    Sukses: IE8, Opera 12.15

  • Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    Kesalahan: Chrome 28, FireFox 23, Safari 5.1.7,
    Sukses: IE8, Opera 12.15

  • Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    Kesalahan: Chrome 28, FireFox 23, Safari 5.1.7,
    Sukses: IE8, Opera 12.15

  • Cache-Control: private, must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Kesalahan: Chrome 28, Safari 5.1.7
    Sukses: FireFox 23, IE8, Opera 12.15

  • Cache-Control: no-store, must-revalidate
    Gagal: tidak ada Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15

83
29 авг. jawabannya diberikan Pacerier 29 Agustus. 2013-08-29 19:50 '13 pada 19:50 2013-08-29 19:50

Saya menemukan rute web.config yang bermanfaat (saya mencoba menambahkannya sebagai tanggapan, tetapi sepertinya tidak diterima dengan cara ini dengan memposting di sini)

 app.use(function(req, res, next) { res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); res.setHeader('Pragma', 'no-cache'); res.setHeader('Expires', '0'); next(); }); 
25
15 июня '12 в 5:40 2012-06-15 05:40 balasan yang diberikan oleh Joseph Connolly pada 15 Juni '12 pada 5:40 2012-06-15 05:40

Saya menemukan bahwa semua jawaban di halaman ini masih memiliki masalah. Secara khusus, saya perhatikan bahwa tidak ada dari mereka yang akan menghentikan IE8 dari menggunakan versi cache halaman ketika mengaksesnya dengan mengklik tombol "Kembali".

Setelah banyak penelitian dan pengujian, saya menemukan bahwa dua headline yang benar-benar saya butuhkan adalah:

Kontrol Cache: tidak ada toko
Bervariasi: *

Untuk menjelaskan judul yang Bervariasi, pilih http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6

Di IE6-8, FF1.5-3.5, Chrome 2-3, Safari 4 dan Opera 9-10, tajuk ini memicu permintaan halaman dari server ketika Anda mengklik tautan halaman atau menempatkan URL >99% dari semua browser yang digunakan sejak 10 Januari.

Di IE6 dan Opera 9-10, menekan tombol kembali terus memuat versi yang di-cache. Di semua browser lain yang saya uji, mereka menerima versi baru dari server. Sampai sekarang, saya belum menemukan satu set header yang akan memaksa browser ini untuk tidak mengembalikan versi halaman yang di-cache ketika saya mengklik tombol Back.

Perbarui :. Setelah menulis jawaban ini, saya menyadari bahwa server web kami mengidentifikasi dirinya sebagai server HTTP 1.0. Header yang saya daftarkan sudah benar sehingga respons dari server HTTP 1.0 tidak di-cache oleh browser. Untuk server HTTP 1.1, lihat laporan BalusC.

23
15 янв. Balas diberikan oleh Chris Vasselli pada 15 Jan 2010-01-15 02:35 '10 pada 2:35 2010-01-15 02:35

Setelah melakukan sedikit riset, kami menemukan daftar tajuk yang tampaknya mencakup sebagian besar peramban:

Di ASP.NET, kami menambahkannya menggunakan cuplikan berikut:

 Response.ClearHeaders(); Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0 Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0 

Ditemukan dari: http://forums.asp.net/t/1013531.aspx

18
08 сент. Jawabannya diberikan oleh Edward Wilde 08 Sep. 2008-09-08 15:11 '08 pada 15:11 2008-09-08 15:11

Menggunakan header pragma dalam respons adalah kisah para istri. RFC2616 mendefinisikannya sebagai header permintaan.

http://www.mnot.net/cache_docs/#PRAGMA

8
17 сент. Balas diberikan oleh Dave Cheney pada 17 Sep. 2008-09-17 17:18 '08 pada 17:18 2008-09-17 17:18

Ada bug di IE6

Konten dengan "Content-Encoding: gzip" selalu di-cache, bahkan jika Anda menggunakan "Cache-Control: no-cache".

http://support.microsoft.com/kb/321722

Anda dapat menonaktifkan kompresi gzip untuk pengguna IE6 (periksa agen pengguna untuk "MSIE 6")

7
13 июня '13 в 18:23 2013-06-13 18:23 jawabannya diberikan oleh Edson Medina 13 Juni 13 pada 18:23 2013-06-13 18:23

PENOLAKAN: Saya sangat merekomendasikan membaca jawaban @BalusC. Setelah membaca tutorial caching berikut: http://www.mnot.net/cache_docs/ (Saya juga menyarankan Anda membacanya), saya pikir ini benar. Namun, karena alasan historis (dan karena saya mengujinya sendiri), saya akan memasukkan jawaban awal saya di bawah:


Saya mencoba jawaban "diterima" untuk PHP, yang tidak berhasil untuk saya. Lalu saya melakukan sedikit riset, menemukan versi kecil, mengujinya, dan berhasil. Ini dia:

 header('Cache-Control: no-store, private, no-cache, must-revalidate'); // HTTP/1.1 header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false); // HTTP/1.1 header('Pragma: public'); header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Expires: 0', false); header('Last-Modified: '.gmdate('D, d MYH:i:s') . ' GMT'); header ('Pragma: no-cache'); 

Itu seharusnya bekerja. Masalahnya adalah bahwa jika Anda mengatur bagian yang sama dari header dua kali, jika false tidak dikirim sebagai argumen kedua dari fungsi header, fungsi header hanya menimpa panggilan header() sebelumnya. Jadi, ketika mengatur Cache-Control , misalnya, jika Anda tidak ingin meletakkan semua argumen dalam satu panggilan ke header() fungsi header() , itu harus melakukan sesuatu seperti ini:

 header('Cache-Control: this'); header('Cache-Control: and, this', false); 

Lihat dokumentasi yang lebih lengkap di sini .

7
18 сент. Balas diberikan oleh Steven Oxley pada 18 Sep 2008-09-18 13:36 '08 pada pukul 1:36 2008-09-18 13:36

Pedoman ini tidak mengurangi risiko keamanan. Mereka benar-benar dimaksudkan untuk membuat UA memperbarui informasi yang mudah menguap, dan bukan untuk menjaga UA dalam menyimpan informasi. Lihat pertanyaan serupa ini . Setidaknya tidak ada jaminan bahwa tidak ada router, proxy, dll. Arahan caching juga tidak akan diabaikan.

Lebih positif lagi, kebijakan mengenai akses fisik ke komputer, instalasi perangkat lunak, dll., Akan membuat Anda unggul satu mil dari kebanyakan perusahaan keamanan. Jika konsumen informasi ini adalah anggota masyarakat, satu-satunya hal yang dapat Anda lakukan adalah membantu mereka memahami bahwa begitu informasi mencapai mobil mereka, mobil ini adalah tanggung jawab mereka , bukan milik Anda.

6
19 сент. Jawabannya diberikan oleh Dustman pada 19 September. 2008-09-19 06:08 '08 pada 6:08 pagi 2008-09-19 06:08

Dalam kasus saya, saya memperbaiki masalah di chrome dengan ini

 <form id="form1" runat="server" autocomplete="off"> 

di mana saya perlu menghapus isi formulir premiu ketika pengguna mengklik tombol mouse untuk alasan keamanan

6
19 июня '13 в 20:28 2013-06-19 20:28 jawabannya diberikan oleh user2321638 19 Juni, '13 pada 8:28 2013-06-19 20:28

Jika Anda mengalami masalah saat memuat IE6-IE8 melalui SSL dan cache: header no-cache (dan nilai-nilai serupa) dengan file MS Office, Anda dapat menggunakan cache: private, no-store header dan mengembalikan file berdasarkan permintaan POST. Itu bekerja.

6
21 сент. Jawab Albert 21 sep. 2012-09-21 12:02 '12 pada 12:02 2012-09-21 12:02

Untuk kernel ASP.NET, buat kelas middleware sederhana:

 public class NoCacheMiddleware { private readonly RequestDelegate m_next; public NoCacheMiddleware( RequestDelegate next ) { m_next = next; } public async Task Invoke( HttpContext httpContext ) { httpContext.Response.OnStarting( ( state ) => { // ref: http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers httpContext.Response.Headers.Append( "Cache-Control", "no-cache, no-store, must-revalidate" ); httpContext.Response.Headers.Append( "Pragma", "no-cache" ); httpContext.Response.Headers.Append( "Expires", "0" ); return Task.FromResult( 0 ); }, null ); await m_next.Invoke( httpContext ); } } 

kemudian daftarkan dengan Startup.cs

 app.UseMiddleware<NoCacheMiddleware>(); 

Pastikan Anda menambahkannya di suatu tempat setelah

 app.UseStaticFiles(); 
6
19 мая '16 в 22:55 2016-05-19 22:55 jawabannya diberikan oleh kspearrin pada 19 Mei 16 pukul 10:55 2016-05-19 22:55

Dokumentasi PHP untuk fungsi header memiliki contoh yang cukup lengkap (disumbangkan oleh pihak ketiga):

  header('Pragma: public'); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past header('Last-Modified: '.gmdate('D, d MYH:i:s') . ' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1 header('Cache-Control: pre-check=0, post-check=0, max-age=0', false); // HTTP/1.1 header ("Pragma: no-cache"); header("Expires: 0", false); 
6
08 сент. jawabannya diberikan oleh Grey Panther 08 sep. 2008-09-08 15:19 '08 pada 15:19 2008-09-08 15:19

RFC untuk HTTP 1.1 mengatakan cara yang benar adalah menambahkan header HTTP untuk:

Kontrol-Cache: tanpa-cache

Browser yang lebih lama dapat mengabaikan hal ini jika mereka tidak mematuhi HTTP 1.1. Untuk mereka, Anda dapat mencoba tajuk utama:

Pragma: tanpa cache

Ini juga harus berfungsi untuk browser HTTP 1.1.

6
08 сент. Balas diberikan oleh Chris Dail 08 Sep 2008-09-08 15:14 '08 pada 15:14 2008-09-08 15:14

Menyiapkan header http yang dimodifikasi pada tanggal tertentu pada tahun 1995 biasanya berhasil.

Berikut ini sebuah contoh:

 Kedaluwarsa: Rab, 15 Nov 1995 04:58:08 GMT Terakhir Diubah: Rabu, 15 Nov 1995 04:58:08 GMT Kontrol-Cache: tanpa-cache, harus divalidasi u>
5
08 сент. Balas diberikan oleh Anders Sandvig 08 Sep 2008-09-08 15:10 '08 pada 15:10 2008-09-08 15:10

Saya mendapatkan hasil terbaik dan paling konsisten di semua browser, mengatur Pragma: no-cache

4
Jawabannya diberikan oleh petr k. 17 Sep 2008-09-17 15:32 '08 pada 15:32 2008-09-17 15:32

Header respons yang disediakan oleh BalusC tidak mengganggu Safari 5 (dan mungkin versi yang lebih lama) untuk menampilkan konten dari cache browser ketika menggunakan tombol kembali browser. Способ предотвращения этого заключается в том, чтобы добавить к тегу body пустой атрибут обработчика события onunload:

 <body onunload=""> 

Этот хак, по-видимому, разбивает кеш обратно-назад в Safari: Есть ли кросс-браузерное событие onload при нажатии кнопки "Назад" ?

4
ответ дан Tobias 24 апр. '11 в 0:24 2011-04-24 00:24

Кроме того, для хорошей меры убедитесь, что вы reset ExpiresDefault в вашем файле .htaccess , если вы используете это для включения кэширования.

 ExpiresDefault "access plus 0 seconds" 

Впоследствии вы можете использовать ExpiresByType для установки определенных значений для файлов, которые вы хотите кэшировать:

 ExpiresByType image/x-icon "access plus 3 month" 

Это может также пригодиться, если ваши динамические файлы, например. php и т.д. кэшируются браузером, и вы не можете понять, почему. Проверьте ExpiresDefault .

4
ответ дан Obinwanne Hill 19 авг. '16 в 23:47 2016-08-19 23:47