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!
sumber
Jawaban:
Saya percaya itu
must-revalidate
berarti:Sedangkan
no-cache
menyiratkan:Jika respons dapat disimpan dalam cache selama 10 detik, maka
must-revalidate
tendangan setelah 10 detik, sedangkanno-cache
menyiratkanmust-revalidate
setelah 0 detik.Setidaknya, itulah interpretasi saya.
sumber
max-age=0, must-revalidate
danno-cache
identikmust-revalidate
danno-cache
memiliki arti berbeda untuk respons baru: Jika respons yang di-cache segar (yaitu, respons belum kedaluwarsa),must-revalidate
akan membuat proxy segera menayangkannya tanpa memvalidasi ulang dengan server, sedangkan denganno-cache
proxy harus memvalidasi ulang tanggapan dalam cache terlepas dari kesegaran. Sumber: "HTTP - The Definitive Guide", halaman 182-183.no-cache
danmax-age=0, must-revalidate
identikmax-age=0, must-revalidate
danno-cache
tidak persis sama. Denganmust-revalidate
, jika server tidak menanggapi permintaan validasi ulang, browser / proxy seharusnya mengembalikan kesalahan 504. Denganno-cache
, itu hanya akan menunjukkan konten yang di-cache, yang mungkin akan disukai oleh pengguna (lebih baik memiliki sesuatu yang basi daripada tidak sama sekali). Inilah sebabnya mengapamust-revalidate
dimaksudkan untuk transaksi kritis saja.sumber
no-cache
interpretasi Anda . Dari RFC 7234 Arahan respons "tanpa cache" menunjukkan bahwa respons tersebut TIDAK HARUS digunakan untuk memenuhi permintaan berikutnya tanpa validasi yang berhasil di server asal. Ini memungkinkan server asal untuk mencegah cache dari menggunakannya untuk memenuhi permintaan tanpa menghubunginya, bahkan oleh cache yang telah dikonfigurasi untuk mengirim tanggapan basi. Ini terdengar mirip dengan pembatasan untukmust-revalidate
must-validate
artinyamust-refresh
Dengan interpretasi Jeffrey Fox tentang
no-cache
, saya telah menguji di bawah chrome 52.0.2743.116 m, hasilnya menunjukkan bahwano-cache
memiliki perilaku yang sama sepertimust-revalidate
, mereka semua TIDAK akan menggunakan cache lokal ketika server tidak terjangkau, dan, mereka semua akan menggunakan cache sambil mengetuk Back browser. / Tombol Forward ketika server tidak dapat dijangkau. Seperti di atas, saya pikirmax-age=0, must-revalidate
identik denganno-cache
, setidaknya dalam implementasi.sumber
Saya pikir ada perbedaan antara
max-age=0, must-revalidate
danno-cache
:Dalam
must-revalidate
hal klien diizinkan untuk mengirimIf-Modified-Since
permintaan dan melayani respons dari cache jika304 Not Modified
dikembalikan.Dalam hal
no-cache
ini, klien tidak harus menyimpan tanggapan, jadi jangan gunakanIf-Modified-Since
.sumber
no-cache
tidak berartino-store
- denganno-cache
, sumber daya masih bisa di-cache di klien; itu hanya harus divalidasi ulang sebelum digunakan?no-cache
danno-store
.no-cache
berarti sumber daya HARUS divalidasi ulang . Validasi kembali termasuk opsi untuk menggunakan permintaan bersyarat, sepertiIf-None-Match
danIf-Modified-Since
.