Pertanyaan Bagaimana cara mengontrol caching halaman web, di semua browser?


Investigasi kami menunjukkan kepada kami bahwa tidak semua browser menghormati arahan cache http dengan cara yang seragam.

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

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

Persyaratan kami berasal dari uji keamanan. Setelah keluar dari situs web kami, Anda dapat menekan tombol kembali dan melihat halaman yang di-cache.


1223
2017-09-08 12:08


asal


Jawaban:


pengantar

Kumpulan header minimum yang benar yang bekerja di semua klien yang disebutkan (dan proksi):

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

Itu Cache-Control adalah per spesifikasi HTTP 1.1 untuk klien dan proxy (dan secara implisit disyaratkan oleh beberapa klien di sebelah Expires). Itu Pragma adalah per spesifikasi HTTP 1.0 untuk klien prasejarah. Itu Expires sesuai dengan spesifikasi HTTP 1.0 dan 1.1 untuk klien dan proksi. Di HTTP 1.1, the Cache-Control lebih diutamakan Expires, jadi ini hanya untuk proxy HTTP 1.0 saja.

Jika Anda tidak peduli dengan IE6 dan cache yang rusak saat melayani halaman melalui HTTPS hanya dengan no-store, maka Anda bisa menghilangkannya Cache-Control: no-cache.

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

Jika Anda tidak peduli dengan klien IE6 atau HTTP 1.0 (HTTP 1.1 diperkenalkan 1997), maka Anda dapat menghilangkannya Pragma.

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

Jika Anda juga tidak peduli dengan proxy HTTP 1.0, Anda bisa menghilangkannya Expires.

Cache-Control: no-store, must-revalidate

Di sisi lain, jika server otomatis-termasuk valid Date header, maka Anda secara teoritis dapat menghilangkan Cache-Control juga dan mengandalkan Expires hanya.

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

Tetapi itu mungkin gagal jika mis. enduser memanipulasi tanggal sistem operasi dan perangkat lunak klien mengandalkannya.

Lain Cache-Control parameter seperti max-age tidak relevan jika yang disebutkan di atas Cache-Control parameter ditentukan. Itu Last-Modified tajuk seperti yang termuat dalam sebagian besar jawaban lainnya di sini adalah hanya menarik jika kamu sebenarnya ingin untuk menyimpan permintaan, jadi Anda tidak perlu menentukannya sama sekali.

Bagaimana mengaturnya?

Menggunakan PHP:

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

Menggunakan Java Servlet, atau Node.js:

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.Cache.SetCacheability(HttpCacheability.NoCache);  // HTTP 1.1.
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

Menggunakan ASP.NET Web API:

// `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.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

Menggunakan ASP:

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.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
response.headers["Pragma"] = "no-cache" # HTTP 1.0.
response.headers["Expires"] = "0" # Proxies.

Menggunakan Python / Django:

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 / Pyramid:

request.response.headerlist.extend(
    (
        ('Cache-Control', 'no-cache, no-store, must-revalidate'),
        ('Pragma', 'no-cache'),
        ('Expires', '0')
    )
)

Menggunakan Google Go:

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 Apache .htaccess mengajukan:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

Menggunakan HTML4:

<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" />

Meta tag HTML vs header tanggapan HTTP

Penting untuk diketahui adalah bahwa ketika halaman HTML disajikan melalui koneksi HTTP, dan sebuah header hadir kedua header respons HTTP dan HTML <meta http-equiv> tag, maka yang ditentukan dalam header respons HTTP akan didahulukan daripada tag meta HTML. Meta tag HTML hanya akan digunakan ketika halaman dilihat dari sistem file disk lokal melalui file file:// URL. Lihat juga Bagian spesifikasi HTML W3 5.2.2. Berhati-hatilah dengan hal ini ketika Anda tidak menentukannya secara terprogram, karena webserver dapat memasukkan beberapa nilai default.

Secara umum, Anda lebih baik saja tidak tentukan tag meta HTML untuk menghindari kebingungan oleh pemula, dan mengandalkan header respons HTTP keras. Apalagi khusus itu <meta http-equiv> tag adalah tidak valid di HTML5. Hanya itu http-equiv nilai yang tercantum dalam Spesifikasi HTML5 diijinkan.

Memverifikasi tajuk respons HTTP yang sebenarnya

Untuk memverifikasi yang satu dan lainnya, Anda dapat melihat / men-debug mereka di monitor lalu lintas HTTP dari perangkat pengembang browser web. Anda bisa sampai di sana dengan menekan F12 di Chrome / Firefox23 + / IE9 +, dan kemudian membuka panel tab "Jaringan" atau "Bersih", dan kemudian mengklik permintaan HTTP yang menarik untuk mengungkap semua detail tentang permintaan dan tanggapan HTTP. Itu di bawah screenshot berasal dari Chrome:

Chrome developer toolset HTTP traffic monitor showing HTTP response headers on stackoverflow.com

Saya juga ingin mengatur header tersebut di 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 querysting untuk memaksa unduh pada file yang diubah. Ketika menerapkan header no-cache tersebut pada unduhan file, maka waspadalah terhadap bug IE7 / 8 saat melayani 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.


2121
2018-03-30 23:08



(hey, semuanya: tolong jangan hanya menyalin & tempelkan semua header yang Anda temukan)

Pertama-tama, Kembali sejarah tombol bukan cache:

Model kesegaran (Bagian 4.2) tidak selalu berlaku untuk mekanisme sejarah. Artinya, mekanisme riwayat dapat menampilkan representasi sebelumnya meskipun telah kedaluwarsa.

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

Kembali seharusnya kembali dalam waktu (ke waktu ketika pengguna adalah login). Itu tidak menavigasi ke depan ke URL yang sebelumnya dibuka.

Namun, dalam praktiknya, cache dapat mempengaruhi tombol kembali, dalam keadaan yang sangat spesifik:

  • Halaman harus dikirim lebih HTTPS, jika tidak, penghancuran cache ini tidak dapat diandalkan. Plus, jika Anda tidak menggunakan HTTPS, maka laman Anda rentan untuk masuk mencuri dengan banyak cara lain.
  • Anda harus mengirim Cache-Control: no-store, must-revalidate (Beberapa browser mengamati no-store dan beberapa orang mengamati must-revalidate)

Kamu tak pernah membutuhkan:

  • <meta> dengan header cache - tidak berfungsi sama sekali. Sama sekali tidak berguna.
  • post-check/pre-check - Ini hanya petunjuk IE yang hanya berlaku untuk cachable sumber daya.
  • Mengirimkan tajuk yang sama dua kali atau dalam belasan bagian. Beberapa cuplikan PHP di luar sana benar-benar menggantikan header sebelumnya, sehingga hanya yang terakhir dikirim.

Jika Anda mau, Anda bisa menambahkan:

  • no-cache atau max-age=0, yang akan membuat sumber daya (URL) "basi" dan memerlukan browser untuk memeriksa dengan server apakah ada versi yang lebih baru (no-storesudah menyiratkan ini lebih kuat).
  • Expires dengan tanggal di masa lalu untuk klien HTTP / 1.0 (meskipun nyata Klien HTTP / 1.0-only benar-benar tidak ada akhir-akhir ini).

Bonus: RFC caching HTTP baru.


205
2017-08-29 16:50



Seperti yang dinyatakan oleh porneL, yang Anda inginkan adalah bukan untuk menonaktifkan cache, tetapi untuk menonaktifkan buffer sejarah. Browser yang berbeda memiliki cara halus untuk menonaktifkan buffer sejarah.

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 bekerja:

  1. Cache-Control: no-store

  2. Cache-Control: no-cache (hanya https)

  3. Pragma: no-cache (hanya https)

  4. Vary: * (hanya https)

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

Di Safari (v5.1.7, 7534.57.2) salah satu dari ini akan bekerja:

  1. Cache-Control: no-store
    <body onunload=""> di html

  2. Cache-Control: no-store (hanya https)

Di IE8 (v8.0.6001.18702IC) salah satu dari ini akan bekerja:

  1. Cache-Control: must-revalidate, max-age=0

  2. Cache-Control: no-cache

  3. Cache-Control: no-store

  4. Cache-Control: must-revalidate
    Expires: 0

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

  6. Pragma: no-cache (hanya https)

  7. Vary: * (hanya https)

Menggabungkan di atas memberi kita 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 penyangga riwayat untuk laman http biasa. Jika Anda benar-benar tidak dapat https dan Anda siap untuk mengabaikan Opera, yang terbaik yang dapat Anda lakukan adalah ini:

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

Di bawah ini menunjukkan log mentah pengujian saya:

HTTP:

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. Cache-Control: no-store
    Gagal: Safari 5.1.7, Opera 12.15
    Sukses: Chrome 28, FireFox 23, IE8

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

  11. Cache-Control: no-cache
    Gagal: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
    Sukses: IE8

  12. Vary: *
    Gagal: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
    Sukses: tidak ada

  13. Pragma: no-cache
    Gagal: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
    Sukses: tidak ada

  14. 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

  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, FireFox 23, Safari 5.1.7, Opera 12.15
    Sukses: IE8

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

  17. Cache-Control: must-revalidate
    Expires: 0
    Gagal: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
    Sukses: IE8

  18. 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

  19. 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:

  1. 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

  2. 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

  3. Vary: *
    Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  4. Pragma: no-cache
    Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  5. Cache-Control: no-cache
    Gagal: Chrome 28, Safari 5.1.7, Opera 12.15
    Sukses: FireFox 23, IE8

  6. 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

  7. 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

  8. 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

  9. Cache-Control: must-revalidate
    Gagal: Chrome 28, FireFox 23, IE8, Safari 5.1.7
    Sukses: Opera 12.15

  10. 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

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

  12. 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

  13. 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

  14. Cache-Control: no-store
    Gagal: Opera 12.15
    Sukses: Chrome 28, FireFox 23, IE8, Safari 5.1.7

  15. 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

  16. 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

  17. 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

  18. Cache-Control: must-revalidate
    Expires: 0
    Gagal: Chrome 28, FireFox 23, Safari 5.1.7,
    Sukses: IE8, Opera 12.15

  19. 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

  20. 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

  21. 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

  22. 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

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


82
2018-06-15 02:40



Saya menemukan rute web.config berguna (mencoba menambahkannya ke jawaban tetapi tampaknya tidak diterima jadi posting di sini)

<configuration>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
            <!-- HTTP 1.1. -->
            <add name="Pragma" value="no-cache" />
            <!-- HTTP 1.0. -->
            <add name="Expires" value="0" />
            <!-- Proxies. -->
        </customHeaders>
    </httpProtocol>
</system.webServer>

Dan di sini adalah cara ekspres / node.js melakukan hal yang sama:

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

24
2018-01-14 23:35



Saya menemukan bahwa semua jawaban di halaman ini masih bermasalah. Secara khusus, saya perhatikan bahwa tidak ada yang akan menghentikan IE8 dari menggunakan versi halaman yang di-cache ketika Anda mengaksesnya dengan menekan tombol kembali.

Setelah banyak riset dan pengujian, saya menemukan bahwa hanya dua header yang sangat saya butuhkan adalah:

Cache-Control: no-store
  Variasi: *

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, header ini menyebabkan halaman diminta dari server ketika Anda mengklik tautan ke halaman, langsung di bilah alamat. Itu mencakup tentang 99% dari semua browser yang digunakan per Januari '10.

Pada IE6, dan Opera 9-10, menekan tombol kembali masih menyebabkan versi cache dimuat. Di semua browser lain yang saya uji, mereka mengambil versi baru dari server. Sejauh ini, saya belum menemukan kumpulan header yang akan menyebabkan browser tersebut tidak mengembalikan versi halaman yang di-cache ketika Anda menekan tombol kembali.

Memperbarui:  Setelah menulis jawaban ini, saya menyadari bahwa server web kami mengidentifikasi dirinya sebagai server HTTP 1.0. Header yang saya cantumkan adalah yang benar untuk tanggapan dari server HTTP 1.0 agar tidak di-cache oleh browser. Untuk server HTTP 1.1, lihat BalusC menjawab.


22
2017-09-08 12:11



Setelah sedikit riset, kami menemukan daftar tajuk berikut yang sepertinya mencakup sebagian besar peramban:

Di ASP.NET kami menambahkan ini 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
2017-09-17 14:18



Penggunaan header pragma dalam tanggapannya adalah kisah istri. RFC2616 hanya mendefinisikannya sebagai header permintaan

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


8
2017-09-18 10:36