Dari RFC 2616
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
tanpa cache
Jika direktif no-cache tidak menentukan nama bidang, maka cache TIDAK HARUS menggunakan respons untuk memenuhi permintaan berikutnya tanpa validasi ulang berhasil dengan server asal. Ini memungkinkan server asal untuk mencegah caching bahkan oleh cache yang telah dikonfigurasi untuk mengembalikan respons basi ke permintaan klien.
Jadi itu mengarahkan agen untuk memvalidasi ulang semua tanggapan.
Dibandingkan dengan ini
harus divalidasi ulang
Ketika direktif harus memvalidasi ulang hadir dalam respons yang diterima oleh cache, cache itu TIDAK boleh menggunakan entri setelah menjadi basi untuk menanggapi permintaan berikutnya tanpa terlebih dahulu memvalidasi ulang dengan server asal
Jadi itu mengarahkan agen untuk memvalidasi respons basi .
Khususnya berkaitan dengan no-cache
, apakah ini cara agen pengguna sebenarnya, secara empiris memperlakukan arahan ini?
Apa gunanya no-cache
jika ada must-revalidate
dan max-age
?
Lihat komentar ini:
http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/
tanpa cache
Meskipun arahan ini sepertinya memerintahkan browser untuk tidak men-cache halaman, ada perbedaan yang halus. Arahan “tanpa cache”, menurut RFC, memberi tahu browser bahwa browser harus divalidasi ulang dengan server sebelum melayani halaman dari cache. Validasi ulang adalah teknik rapi yang memungkinkan aplikasi menghemat lebar pita. Jika halaman yang di-cache oleh browser tidak berubah, server hanya memberi sinyal ke browser dan halaman ditampilkan dari cache. Karenanya, browser (setidaknya secara teori), menyimpan halaman dalam cache-nya, tetapi menampilkannya hanya setelah divalidasi ulang dengan server. Dalam praktiknya, IE dan Firefox sudah mulai memperlakukan direktif tanpa-cache seolah-olah itu memerintahkan browser untuk tidak melakukan cache halaman. Kami mulai mengamati perilaku ini sekitar setahun yang lalu.
Adakah yang punya hal yang lebih resmi tentang ini?
Memperbarui
Arahan yang harus divalidasi ulang harus digunakan oleh server jika dan hanya jika kegagalan untuk memvalidasi permintaan pada representasi dapat mengakibatkan operasi yang tidak benar, seperti transaksi keuangan yang tidak dieksekusi secara diam-diam.
Itu adalah sesuatu yang tidak pernah saya ingat sampai sekarang. RFC mengatakan untuk tidak menggunakan ulang harus ringan. Masalahnya, dengan layanan web, Anda harus mengambil pandangan negatif dan menganggap yang terburuk untuk aplikasi klien yang tidak dikenal. Sumber daya basi apa pun berpotensi menyebabkan masalah.
Dan hal lain yang baru saja saya pertimbangkan, tanpa Last-Modified atau ETags, browser hanya dapat mengambil seluruh sumber daya lagi. Namun dengan ETags, saya telah mengamati bahwa Chrome setidaknya tampaknya memvalidasi ulang pada setiap permintaan. Yang membuat kedua arahan ini diperdebatkan atau paling tidak buruk namanya karena mereka tidak dapat memvalidasi ulang dengan benar kecuali permintaan tersebut juga menyertakan tajuk lain yang kemudian menyebabkan 'selalu memvalidasi ulang'.
Saya hanya ingin memperjelas poin terakhir itu. Dengan hanya pengaturan must-revalidate
tetapi tidak termasuk baik sebagai ETag atau Last-Modified, agen hanya bisa mendapatkan konten lagi karena tidak ada untuk mengirim ke server untuk membandingkan.
Namun, pengujian empiris saya menunjukkan bahwa ketika ETag atau data tajuk yang dimodifikasi dimasukkan dalam respons, agen tetap memvalidasi ulang, terlepas dari keberadaan must-revalidate
tajuk.
Jadi intinya must-revalidate
adalah untuk memaksa 'bypass cache' ketika basi, yang hanya dapat terjadi ketika Anda telah menetapkan seumur hidup / usia, sehingga jika must-revalidate
diatur pada respons tanpa usia atau header lainnya, itu secara efektif menjadi setara dengan no-cache
karena responsnya akan segera dianggap basi.
- Jadi saya akhirnya akan menandai jawaban Gili!