Investigasi kami menunjukkan bahwa tidak semua browser menghargai arahan cache HTTP dengan cara yang seragam.
Demi 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
Persyaratan kami berasal dari tes keamanan. Setelah keluar dari situs web kami, Anda dapat menekan tombol kembali dan melihat halaman yang di-cache.
http
caching
https
http-headers
Edward Wilde
sumber
sumber
Jawaban:
pengantar
Kumpulan header minimum yang benar yang bekerja di semua klien yang disebutkan (dan proksi):
Ini
Cache-Control
sesuai dengan spesifikasi HTTP 1.1 untuk klien dan proksi (dan secara implisit diperlukan oleh beberapa klien di sebelahExpires
). IniPragma
sesuai dengan spesifikasi HTTP 1.0 untuk klien prasejarah. IniExpires
sesuai dengan spesifikasi HTTP 1.0 dan 1.1 untuk klien dan proksi. Di HTTP 1.1, yangCache-Control
diutamakanExpires
, jadi itu hanya untuk HTTP 1.0 proksi saja.Jika Anda tidak peduli tentang IE6 dan caching yang rusak saat melayani halaman hanya dengan HTTPS
no-store
, maka Anda dapat menghilangkannyaCache-Control: no-cache
.Jika Anda tidak peduli tentang klien IE6 atau HTTP 1.0 (HTTP 1.1 diperkenalkan 1997), maka Anda dapat menghilangkannya
Pragma
.Jika Anda tidak peduli tentang proksi HTTP 1.0, maka Anda dapat menghilangkannya
Expires
.Di sisi lain, jika server secara otomatis menyertakan
Date
tajuk yang valid , maka Anda secara teoritis dapat menghilangkanCache-Control
danExpires
hanya mengandalkan .Tapi itu mungkin gagal jika misalnya pengguna akhir memanipulasi tanggal sistem operasi dan perangkat lunak klien bergantung padanya.
Cache-Control
Parameter lain sepertimax-age
tidak relevan jikaCache-Control
parameter yang disebutkan di atas ditentukan. TheLast-Modified
sundulan sebagai termasuk dalam sebagian besar jawaban yang lain di sini adalah hanya menarik jika Anda benar-benar ingin cache permintaan, sehingga Anda tidak perlu menentukan sama sekali.Bagaimana cara mengaturnya?
Menggunakan PHP:
Menggunakan Java Servlet, atau Node.js:
Menggunakan ASP.NET-MVC
Menggunakan ASP.NET Web API:
Menggunakan ASP.NET:
Menggunakan ASP.NET Core v3
Menggunakan ASP:
Menggunakan Ruby on Rails, atau Python / Flask:
Menggunakan Python / Django:
Menggunakan Python / Piramida:
Menggunakan Go:
Menggunakan
.htaccess
file Apache :Menggunakan HTML4:
Tag meta HTML vs header respons HTTP
Penting untuk diketahui adalah bahwa ketika sebuah halaman HTML dilayani melalui koneksi HTTP, dan header hadir dalam kedua header respon HTTP dan HTML
<meta http-equiv>
tag, maka salah satu yang ditentukan dalam header respon HTTP akan mendapatkan lebih diutamakan daripada HTML meta tag. Tag meta HTML hanya akan digunakan ketika halaman dilihat dari sistem file disk lokal melaluifile://
URL. Lihat juga W3 HTML spec bab 5.2.2 . Berhati-hatilah dengan ini ketika Anda tidak menentukannya secara pemrograman karena server web dapat menyertakan beberapa nilai default.Secara umum, Anda sebaiknya tidak menentukan tag meta HTML untuk menghindari kebingungan oleh pemula dan mengandalkan header respons HTTP keras. Selain itu, secara khusus
<meta http-equiv>
tag - tag itu tidak valid dalam HTML5. Hanyahttp-equiv
nilai yang tercantum dalam spesifikasi HTML5 yang diizinkan.Memverifikasi header respons HTTP yang sebenarnya
Untuk memverifikasi yang satu dan yang lain, Anda dapat melihat / men-debug mereka di monitor lalu lintas HTTP toolset pengembang webbrowser. Anda dapat mencapainya dengan menekan F12 di Chrome / Firefox23 + / IE9 +, dan kemudian membuka panel "Network" atau "Net", dan kemudian mengklik permintaan HTTP yang menarik untuk mengungkap semua detail tentang permintaan dan tanggapan HTTP. The bawah screenshot adalah dari Chrome:
Saya juga ingin mengatur header itu pada unduhan file
Pertama-tama, pertanyaan dan jawaban ini ditargetkan pada "halaman web" (halaman HTML), bukan "unduhan file" (PDF, zip, Excel, dll). Anda sebaiknya menyimpannya dalam cache dan menggunakan beberapa pengenal versi file di suatu tempat di jalur URI atau querystring untuk memaksa pengunduhan ulang pada file yang diubah. Saat menerapkan tajuk tanpa-cache tersebut pada unduhan file, maka waspadalah terhadap bug IE7 / 8 saat menyajikan unduhan file melalui HTTPS alih-alih HTTP. Untuk detail, lihat IE tidak dapat mengunduh foo.jsf. IE tidak dapat membuka situs internet ini. Situs yang diminta tidak tersedia atau tidak dapat ditemukan .
sumber
(hei, semuanya: tolong jangan sembarangan menyalin & menempel semua header yang dapat Anda temukan)
Pertama-tama, riwayat tombol Kembali bukan cache :
Dalam spesifikasi HTTP lama, kata-katanya bahkan lebih kuat, secara eksplisit memberitahu browser untuk mengabaikan arahan cache untuk sejarah tombol kembali.
Kembali seharusnya kembali ke masa (waktu ketika pengguna sedang login). Itu tidak menavigasi ke depan ke URL yang sebelumnya dibuka.
Namun, dalam praktiknya, cache dapat memengaruhi tombol kembali, dalam keadaan yang sangat spesifik:
Cache-Control: no-store, must-revalidate
(beberapa browser mengamatino-store
dan beberapa mengamatimust-revalidate
)Anda tidak perlu:
<meta>
dengan header cache - tidak berfungsi sama sekali. Sama sekali tidak berguna.post-check
/pre-check
- Ini hanya direktif IE yang hanya berlaku untuk sumber daya yang dapat diakses .Jika mau, Anda dapat menambahkan:
no-cache
ataumax-age=0
, yang akan membuat sumber daya (URL) "basi" dan memerlukan browser untuk memeriksa dengan server jika ada versi yang lebih baru (no-store
sudah menyiratkan ini lebih kuat).Expires
dengan tanggal di masa lalu untuk HTTP / 1.0 klien (meskipun sebenarnya HTTP / 1.0-satunya klien benar-benar tidak ada hari ini).Bonus: RFC caching HTTP baru .
sumber
Cache-Control: must-revalidate
. Mengapa tidak mengirimCache-Control: no-cache
karenano-cache
sudah tersiratmust-revalidate
? w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1no-cache
denganmust-revalidate
benar untuk cache, tetapi riwayat kembali bukan cache. Peramban kasus khusus eksplisitmust-revalidate
untuk mengontrol perilaku riwayat .Seperti yang dinyatakan @Kornel, yang Anda inginkan bukan untuk menonaktifkan cache, tetapi untuk menonaktifkan buffer sejarah. Browser yang berbeda memiliki caranya sendiri yang halus untuk menonaktifkan buffer riwayat.
Di Chrome (v28.0.1500.95 m) kita dapat melakukan ini hanya dengan
Cache-Control: no-store
.Di FireFox (v23.0.1) salah satu dari ini 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 hanya dapat melakukannya dengan
Cache-Control: must-revalidate
(https saja).Di Safari (v5.1.7, 7534.57.2) salah satu dari ini akan berfungsi:
Cache-Control: no-store
<body onunload="">
dalam htmlCache-Control: no-store
(hanya https)Di IE8 (v8.0.6001.18702IC) salah satu dari ini 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)Menggabungkan 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 biasa. Jika Anda benar-benar tidak dapat memperoleh https dan Anda siap mengabaikan Opera, yang terbaik yang dapat Anda lakukan adalah ini:
Di bawah ini menunjukkan log mentah dari 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="">
Gagal: 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="">
Gagal: 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: *
Gagal: 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: *
Gagal: 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="">
Gagal: 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="">
Gagal: 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="">
Gagal: 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="">
Gagal: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Sukses: IE8
Cache-Control: no-store
Gagal: Safari 5.1.7, Opera 12.15
Sukses: Chrome 28, FireFox 23, IE8
Cache-Control: no-store
<body onunload="">
Gagal: Opera 12.15
Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: no-cache
Gagal: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Sukses: IE8
Vary: *
Gagal: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Sukses: tidak ada
Pragma: no-cache
Gagal: 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="">
Gagal: 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="">
Gagal: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Sukses: IE8
Cache-Control: must-revalidate, max-age=0
Gagal: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Sukses: IE8
Cache-Control: must-revalidate
Expires: 0
Gagal: 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
Gagal: 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="">
Gagal: 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="">
Gagal: 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="">
Gagal: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Sukses: tidak ada
Vary: *
Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
Sukses: FireFox 23, IE8
Pragma: no-cache
Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
Sukses: FireFox 23, IE8
Cache-Control: no-cache
Gagal: 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
Gagal: 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: *
Gagal: 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: *
Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
Sukses: FireFox 23, IE8
Cache-Control: must-revalidate
Gagal: 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="">
Gagal: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Sukses: Opera 12.15
Cache-Control: must-revalidate, max-age=0
Gagal: 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="">
Gagal: 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="">
Gagal: Chrome 28, Safari 5.1.7
Sukses: FireFox 23, IE8, Opera 12.15
Cache-Control: no-store
Gagal: 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="">
Gagal: 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="">
Gagal: 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: *
Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
Sukses: FireFox 23, IE8
Cache-Control: must-revalidate
Expires: 0
Gagal: 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
Gagal: 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="">
Gagal: 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="">
Gagal: 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: *
Gagal: 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
sumber
<body onunload="">
tetapi tampaknya lebih seperti cara mengatasi masalah yang sebenarnya. Saya sudah mencoba menggunakan .htaccess dan memodifikasi header dengan cara itu, jika saya menggunakan HTTPS, apakah seharusnya berfungsi seperti itu? Ini terutama safari di mana masalah paling banyak muncul.Cache-Control: no-store
akan melakukan trik.<body onunload="">
hanya diperlukan ketika Anda tidak memiliki HTTPS.Saya menemukan rute web.config berguna (mencoba menambahkannya ke jawaban tetapi tampaknya tidak diterima sehingga memposting di sini)
Dan di sini adalah cara express / node.js untuk melakukan hal yang sama:
sumber
web.conf
itu: Ini adalah pengaturan utama dan file konfigurasi untukASP.NET
aplikasi web. Ini adalah dokumen XML yang berada di direktori root. ( wiki ).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 Anda mengaksesnya dengan menekan tombol kembali.
Setelah banyak penelitian dan pengujian, saya menemukan bahwa hanya dua header yang benar-benar saya butuhkan adalah:
Untuk penjelasan tentang header Vary, periksa http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6
Pada IE6-8, FF1.5-3.5, Chrome 2-3, Safari 4, dan Opera 9-10, tajuk ini menyebabkan halaman diminta dari server ketika Anda mengklik tautan ke halaman, atau meletakkan URL langsung di bilah alamat. Itu mencakup sekitar 99% dari semua browser yang digunakan pada Januari '10.
Pada IE6, dan Opera 9-10, menekan tombol kembali masih menyebabkan versi yang di-cache dimuat. Di semua browser lain yang saya uji, mereka mengambil versi baru dari server. Sejauh ini, saya belum menemukan set header yang akan menyebabkan browser tersebut tidak mengembalikan versi halaman yang di-cache ketika Anda menekan tombol kembali.
Pembaruan: Setelah menulis jawaban ini, saya menyadari bahwa server web kami mengidentifikasi dirinya sebagai server HTTP 1.0. Header yang saya daftarkan adalah yang benar agar respons dari server HTTP 1.0 tidak di-cache oleh browser. Untuk server HTTP 1.1, lihat jawaban BalusC .
sumber
Setelah sedikit riset, kami menemukan daftar tajuk berikut yang tampaknya mencakup sebagian besar peramban:
Di ASP.NET kami menambahkan ini menggunakan cuplikan berikut:
Ditemukan dari: http://forums.asp.net/t/1013531.aspx
sumber
Cache-Control: no-cache
danCache-Control: private
bentrok - Anda seharusnya tidak pernah bersama-sama: yang pertama memberi tahu browser dan proksi untuk tidak melakukan cache sama sekali, yang terakhir memberi tahu proxy untuk tidak melakukan cache tetapi membiarkan browser menyimpan salinan pribadi mereka sendiri. Saya tidak yakin pengaturan browser mana yang akan diikuti, tetapi sepertinya tidak konsisten antara browser dan versi.Penggunaan tajuk pragma dalam respons adalah kisah istri. RFC2616 hanya mendefinisikannya sebagai header permintaan
http://www.mnot.net/cache_docs/#PRAGMA
sumber
PENOLAKAN: Saya sangat menyarankan membaca jawaban @ BalusC. Setelah membaca tutorial caching berikut: http://www.mnot.net/cache_docs/ (Saya sarankan Anda membacanya juga), saya yakin itu benar. Namun, karena alasan historis (dan karena saya telah mengujinya sendiri), saya akan memasukkan jawaban asli saya di bawah:
Saya mencoba jawaban 'diterima' untuk PHP, yang tidak berhasil untuk saya. Lalu saya melakukan sedikit riset, menemukan sedikit varian, mengujinya, dan berhasil. Ini dia:
Itu seharusnya bekerja. Masalahnya adalah ketika mengatur bagian yang sama dari header dua kali, jika
false
tidak dikirim sebagai argumen kedua ke fungsi header, fungsi header hanya akan menimpaheader()
panggilan sebelumnya . Jadi, ketika mengaturCache-Control
, misalnya jika seseorang tidak ingin meletakkan semua argumen dalam satuheader()
panggilan fungsi, ia harus melakukan sesuatu seperti ini:Lihat dokumentasi yang lebih lengkap di sini .
sumber
Untuk ASP.NET Core, buat kelas middleware sederhana:
kemudian daftarkan dengan
Startup.cs
Pastikan Anda menambahkan ini di suatu tempat setelah
sumber
Arahan ini tidak mengurangi risiko keamanan apa pun. Mereka benar-benar dimaksudkan untuk memaksa UA untuk menyegarkan informasi yang mudah menguap, bukan mencegah UA mempertahankan informasi. Lihat pertanyaan serupa ini . Paling tidak, tidak ada jaminan bahwa router, proxy, dll. Tidak akan mengabaikan arahan caching juga.
Pada catatan yang lebih positif, kebijakan mengenai akses fisik ke komputer, instalasi perangkat lunak, dan sejenisnya akan menempatkan Anda jauh di depan kebanyakan perusahaan dalam hal keamanan. Jika konsumen informasi ini adalah anggota masyarakat, satu-satunya hal yang dapat Anda lakukan adalah membantu mereka memahami bahwa begitu informasi mengenai mesin mereka, mesin itu adalah tanggung jawab mereka , bukan milik Anda.
sumber
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")
sumber
RFC untuk HTTP 1.1 mengatakan metode yang tepat adalah menambahkan HTTP Header untuk:
Kontrol-Cache: tanpa-cache
Browser yang lebih lama dapat mengabaikan ini jika mereka tidak memenuhi HTTP 1.1. Untuk itu Anda dapat mencoba tajuk:
Pragma: tanpa cache
Ini juga seharusnya berfungsi untuk browser HTTP 1.1.
sumber
Mengatur header http yang dimodifikasi ke tanggal tertentu pada 1995 biasanya berhasil.
Ini sebuah contoh:
sumber
The dokumentasi PHP untuk header fungsi memiliki contoh yang agak lengkap (disumbangkan oleh pihak ketiga):
sumber
Jika Anda menghadapi masalah unduhan dengan 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. Berhasil.
sumber
dalam kasus saya, saya memperbaiki masalah di chrome dengan ini
di mana saya perlu menghapus konten data formulir previus ketika pengguna mengklik tombol kembali untuk alasan keamanan
sumber
Jawaban yang diterima tampaknya tidak berfungsi untuk IIS7 +, menjawab banyak pertanyaan tentang header cache yang tidak dikirim di II7:
Dan seterusnya
Jawaban yang diterima benar di mana header harus ditetapkan, tetapi tidak dalam bagaimana mereka harus ditetapkan. Cara ini bekerja dengan IIS7:
Baris pertama diset
Cache-control
keno-cache
, dan baris kedua menambahkan atribut lainnyano-store, must-revalidate
sumber
Response.Cache.SetAllowResponseInBrowserHistory(false); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Saya mendapatkan hasil terbaik dan paling konsisten di semua browser dengan mengatur Pragma: tanpa-cache
sumber
Header dalam jawaban yang diberikan oleh BalusC tidak mencegah Safari 5 (dan mungkin versi yang lebih lama juga) menampilkan konten dari cache browser saat menggunakan tombol kembali browser. Cara untuk mencegah hal ini adalah dengan menambahkan atribut event handler onunload yang kosong ke tag body:
Peretasan ini rupanya memecah cache penerusan mundur di Safari: Apakah ada peristiwa lintas-browser yang memuat ketika mengeklik tombol kembali?
sumber
Selain itu, hanya untuk ukuran yang baik, pastikan Anda mereset
ExpiresDefault
di.htaccess
file Anda jika Anda menggunakannya untuk mengaktifkan caching.Setelah itu, Anda dapat menggunakan
ExpiresByType
untuk menetapkan nilai spesifik untuk file yang ingin Anda cache:Ini juga mungkin berguna jika file dinamis Anda misalnya php, dll. Sedang di-cache oleh browser, dan Anda tidak dapat menemukan alasannya. Periksa
ExpiresDefault
.sumber
Selain tajuk, pertimbangkan untuk melayani halaman Anda melalui https . Banyak browser tidak akan melakukan cache https secara default.
sumber
sumber
Untuk menyelesaikan BalusC -> JAWABAN Jika Anda menggunakan perl Anda dapat menggunakan CGI untuk menambahkan header HTTP.
Menggunakan Perl:
Menggunakan apache httpd.conf
Catatan: Ketika saya mencoba menggunakan html META, browser mengabaikannya dan membuat cache halaman.
sumber
Saya hanya ingin menunjukkan bahwa jika seseorang ingin mencegah caching konten yang HANYA dinamis, menambahkan header tambahan itu harus dibuat secara terprogram.
Saya mengedit file konfigurasi proyek saya untuk menambahkan header no-cache, tetapi itu juga menonaktifkan caching konten statis, yang biasanya tidak diinginkan. Memodifikasi header respons dalam kode memastikan bahwa gambar dan file gaya akan di-cache.
Ini cukup jelas, namun masih layak disebut.
Dan satu lagi peringatan. Hati-hati menggunakan metode ClearHeaders dari kelas HttpResponse. Ini mungkin memberi Anda beberapa memar jika Anda menggunakannya secara sembrono. Seperti itu memberi saya.
Setelah mengarahkan kembali ke acara ActionFilterAttribute konsekuensi dari menghapus semua header kehilangan semua data sesi dan data dalam penyimpanan TempData. Lebih aman untuk mengalihkan dari Tindakan atau tidak menghapus tajuk saat pengalihan dilakukan.
Setelah dipikir-pikir saya mencegah semua orang untuk menggunakan metode ClearHeaders. Lebih baik menghapus header secara terpisah. Dan untuk mengatur header Cache-Control dengan benar saya menggunakan kode ini:
sumber
Saya tidak beruntung dengan
<head><meta>
elemen. Menambahkan parameter terkait cache HTTP secara langsung (di luar dokumen HTML) memang berfungsi untuk saya.Kode contoh dalam Python menggunakan
web.header
panggilan web.py berikut. Saya sengaja menghapus kode utilitas pribadi saya yang tidak relevan.sumber
Lihat tautan ini ke Studi Kasus tentang Caching:
http://securityevaluators.com/knowledge/case_studies/caching/
Ringkasan, menurut artikel itu, hanya
Cache-Control: no-store
berfungsi di Chrome, Firefox dan IE. IE menerima kontrol lain, tetapi Chrome dan Firefox tidak. Tautan ini merupakan bacaan yang baik lengkap dengan sejarah caching dan dokumentasi bukti konsep.sumber
Tidak yakin apakah jawaban saya terdengar sederhana dan bodoh, dan mungkin sudah diketahui Anda sejak lama, tetapi karena mencegah seseorang menggunakan tombol kembali browser untuk melihat halaman bersejarah Anda adalah salah satu tujuan Anda, Anda dapat menggunakan:
window.location.replace("https://www.example.com/page-not-to-be-viewed-in-browser-history-back-button.html");
Tentu saja, ini mungkin tidak dapat diterapkan di seluruh situs, tetapi setidaknya untuk beberapa halaman penting, Anda dapat melakukannya. Semoga ini membantu.
sumber
Anda dapat menggunakan blok lokasi untuk mengatur file individual alih-alih seluruh aplikasi mendapatkan caching di IIS
sumber