Header Cache-Control: max-age=0
menyiratkan bahwa konten dianggap basi (dan harus diambil kembali) segera, yang berlaku sama dengan Cache-Control: no-cache
.
http
caching
http-headers
rubyruy
sumber
sumber
Jawaban:
Saya memiliki pertanyaan yang sama, dan menemukan beberapa info dalam pencarian saya (pertanyaan Anda muncul sebagai salah satu hasil). Inilah yang saya ditentukan ...
Ada dua sisi pada
Cache-Control
tajuk. Satu sisi adalah di mana ia dapat dikirim oleh server web (alias. "Server asal"). Sisi lain adalah di mana ia dapat dikirim oleh browser (alias. "Agen pengguna").Saat dikirim oleh server asal
Saya percaya
max-age=0
hanya memberi tahu cache (dan agen pengguna) responsnya sudah basi sejak awal dan karenanya mereka HARUS memvalidasi kembali respons (mis. DenganIf-Not-Modified
header) sebelum menggunakan salinan yang di-cache, sedangkan,no-cache
memberi tahu mereka bahwa mereka HARUS memvalidasi ulang sebelum menggunakan cache. salinan. Dari 14.9.1 Apa itu Cacheable :Dengan kata lain, cache kadang-kadang dapat memilih untuk menggunakan respons basi (meskipun saya yakin mereka harus menambahkan
Warning
header), tetapino-cache
mengatakan bahwa cache tidak diperbolehkan menggunakan respons basi, apa pun yang terjadi. Mungkin Anda ingin perilaku REAL-validasi HARUS ketika statistik bisbol dihasilkan dalam halaman, tetapi Anda ingin perilaku HARUS -revalidasi ketika Anda menghasilkan respons terhadap pembelian e-commerce.Meskipun Anda benar dalam komentar Anda ketika Anda mengatakan
no-cache
tidak seharusnya mencegah penyimpanan, sebenarnya mungkin ada perbedaan lain saat menggunakanno-cache
. Saya menemukan sebuah halaman, Cache Control Directive Demystified , yang mengatakan (Saya tidak dapat menjamin kebenarannya):Sebagai tambahan, tampaknya bagi saya bahwa
Cache-Control: max-age=0, must-revalidate
pada dasarnya harus berarti hal yang samaCache-Control: no-cache
. Jadi mungkin itu cara untuk mendapatkan perilaku HARUS -validasino-cache
, sambil menghindari migrasi yang jelasno-cache
untuk melakukan hal yang sama sepertino-store
(mis. Tidak ada caching apa pun)?Saat dikirim oleh agen pengguna
Saya percaya jawaban shahkalpesh berlaku untuk sisi agen pengguna. Anda juga dapat melihat 13.2.6 Disambiguasi Banyak Respons .
Jika agen pengguna mengirim permintaan dengan
Cache-Control: max-age=0
(alias. "Validasi ujung-ke-ujung"), maka setiap cache di sepanjang jalan akan memvalidasi ulang entri cache-nya (mis. DenganIf-Not-Modified
header) sampai ke server asal. Jika jawabannya adalah 304 (Tidak Dimodifikasi), entitas yang di-cache dapat digunakan.Di sisi lain, mengirim permintaan dengan
Cache-Control: no-cache
(alias. "Reload end-to-end") tidak memvalidasi ulang dan server TIDAK HARUS menggunakan salinan yang di-cache ketika merespons.sumber
must-revalidate
TIDAK dimaksudkan sama denganno-cache
atauno-store
. Cache bypass yang terakhir sama sekali, tetapi yang pertama hanya mengatakan bahwa cache harus selalu diperiksa untuk kesegaran, tetapi jika masih lancar, ini dapat digunakan, sehingga menghemat bandwidth. Yang terakhir memaksa pengunduhan penuh ujung ke ujung sepanjang waktu, mengambil bandwidth yang tidak perlu dan menunda tanggapan.no-cache
tidak "mem-bypass cache sama sekali" atau "memaksa unduhan penuh end-to-end sepanjang waktu", setidaknya tidak di semua browser. Spesifikasinya hanya mengatakan bahwa browser harus memvalidasi cache.usia maks = 0
Ini sama dengan mengklik Refresh , yang berarti, beri saya salinan terbaru kecuali saya sudah memiliki salinan terbaru.
tanpa cache
Ini menahan Shift sembari mengklik Refresh, yang artinya, ulangi saja apa pun yang terjadi.
sumber
no-store
Pertanyaan lama sekarang, tetapi jika orang lain menemukan ini melalui pencarian seperti yang saya lakukan, tampaknya IE9 akan menggunakan ini untuk mengkonfigurasi perilaku sumber daya saat menggunakan tombol kembali dan maju. Ketika max-age = 0 digunakan, browser akan menggunakan versi terakhir saat melihat sumber daya di tekan maju / mundur. Jika tidak ada cache digunakan, sumber daya akan diambil ulang.
Rincian lebih lanjut tentang caching IE9 dapat dilihat pada posting blog caching msdn ini .
sumber
Dalam pengujian saya baru-baru ini dengan IE8 dan Firefox 3.5, tampaknya keduanya kompatibel dengan RFC. Namun, mereka berbeda dalam "keramahan" mereka ke server asal. IE8 memperlakukan
no-cache
respons dengan semantik yang sama denganmax-age=0,must-revalidate
. Firefox 3.5, bagaimanapun, tampaknya memperlakukanno-cache
sebagai setara denganno-store
, yang menyebalkan untuk kinerja dan penggunaan bandwidth.Squid Cache, secara default, tampaknya tidak pernah menyimpan apa pun dengan
no-cache
header, seperti Firefox.Saran saya adalah mengatur
public,max-age=0
sumber daya non-sensitif yang Anda ingin memeriksa kesegaran pada setiap permintaan, tetapi masih memungkinkan kinerja dan manfaat bandwidth caching. Untuk item per pengguna dengan pertimbangan yang sama, gunakanprivate,max-age=0
.Saya akan menghindari penggunaan
no-cache
sepenuhnya, karena tampaknya telah dibastardisasi oleh beberapa browser dan cache populer dengan fungsional yang setarano-store
.Selain itu, jangan meniru Akamai dan Limelight. Sementara mereka pada dasarnya menjalankan array caching besar-besaran sebagai bisnis utama mereka, dan harus menjadi ahli, mereka sebenarnya memiliki kepentingan dalam menyebabkan lebih banyak data diunduh dari jaringan mereka. Google mungkin juga bukan pilihan yang baik untuk dicontoh. Mereka tampaknya menggunakan
max-age=0
atauno-cache
secara acak tergantung pada sumber daya.sumber
private,max-age=0
.Courtesy: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
Jangan terima ini sebagai jawaban - saya harus membacanya untuk memahami penggunaannya yang sebenarnya :)
sumber
Saya bukan ahli caching, tapi Mark Nottingham. Ini dokumen caching- nya . Ia juga memiliki tautan yang sangat baik di bagian Referensi.
Berdasarkan bacaan saya tentang dokumen-dokumen itu, sepertinya
max-age=0
bisa memungkinkan cache untuk mengirim tanggapan cache ke permintaan yang datang pada "waktu yang sama" di mana "waktu yang sama" berarti cukup dekat bersama-sama mereka terlihat simultan ke cache, tetapino-cache
tidak mau .sumber
Ngomong-ngomong, perlu dicatat bahwa beberapa perangkat seluler, terutama produk Apple seperti iPhone / iPad benar-benar mengabaikan tajuk seperti tidak ada cache, tidak ada toko, Kedaluwarsa: 0, atau apa pun yang Anda coba paksakan agar tidak digunakan kembali kedaluwarsa halaman formulir.
Hal ini menyebabkan kami sakit kepala tanpa akhir ketika kami mencoba untuk mendapatkan masalah dari iPad pengguna yang mengatakan, tertidur di halaman yang telah mereka capai melalui proses formulir, katakan langkah 2 dari 3, dan kemudian perangkat benar-benar mengabaikan toko / arahan cache, dan sejauh yang saya tahu, cukup mengambil snapshot virtual halaman dari keadaan terakhirnya, yaitu mengabaikan apa yang dikatakan secara eksplisit, dan, tidak hanya itu, mengambil halaman yang tidak boleh disimpan , dan menyimpannya tanpa benar-benar memeriksanya lagi, yang mengarah ke semua jenis masalah Sesi aneh, antara lain.
Saya hanya menambahkan ini kalau-kalau ada yang datang dan tidak tahu mengapa mereka mendapatkan kesalahan sesi dengan khususnya iPhone dan iPad, yang tampaknya merupakan pelanggar terburuk di bidang ini.
Saya telah melakukan pengujian debugger yang cukup luas dengan masalah ini, dan ini adalah kesimpulan saya, perangkat mengabaikan arahan ini sepenuhnya.
Bahkan dalam penggunaan reguler, saya telah menemukan bahwa beberapa ponsel juga benar-benar gagal untuk memeriksa versi baru melalui katakanlah, Kedaluwarsa: 0 kemudian memeriksa tanggal terakhir yang dimodifikasi untuk menentukan apakah harus mendapatkan yang baru.
Itu tidak terjadi, jadi apa yang terpaksa saya lakukan adalah menambahkan string kueri ke file css / js yang saya butuhkan untuk memaksa pembaruan, yang mengelabui perangkat seluler yang bodoh untuk berpikir itu adalah file yang tidak dimilikinya, seperti: my .css? v = 1, lalu v = 2 untuk pembaruan css / js. Ini sebagian besar bekerja.
Selain itu, peramban pengguna juga dibiarkan bawaan, sejak 2016, seperti yang saya temukan terus-menerus (kami melakukan BANYAK perubahan dan pembaruan ke situs kami) juga gagal memeriksa tanggal terakhir yang dimodifikasi pada file tersebut, tetapi kueri metode string memperbaiki masalah itu. Ini adalah sesuatu yang saya perhatikan dengan klien dan orang-orang kantor yang cenderung menggunakan default pengguna normal dasar pada browser mereka, dan tidak memiliki kesadaran tentang masalah caching dengan css / js dll, hampir selalu gagal untuk mendapatkan css / js baru pada perubahan, yang berarti default untuk browser mereka, sebagian besar MSIE / Firefox, tidak melakukan apa yang diperintahkan, mereka mengabaikan perubahan dan mengabaikan tanggal modifikasi terakhir dan tidak memvalidasi, bahkan dengan Kadaluwarsa: 0 atur secara eksplisit.
Ini adalah utas yang bagus dengan banyak informasi teknis yang baik, tetapi juga penting untuk dicatat betapa buruknya dukungan untuk hal ini pada perangkat seluler. Setiap beberapa bulan saya harus menambahkan lebih banyak lapisan perlindungan terhadap kegagalan mereka untuk mengikuti perintah-perintah tajuk yang mereka terima, atau untuk secara tepat mem-interpet perintah-perintah itu.
sumber
Satu hal yang (secara mengejutkan) belum disebutkan adalah bahwa permintaan dapat secara eksplisit menunjukkan bahwa ia akan menerima data basi, menggunakan
max-stale
arahan. Dalam hal itu, jika server meresponsmax-age=0
, cache hanya akan mempertimbangkan respons basi, dan akan bebas menggunakannya untuk memenuhi permintaan klien [yang meminta data yang berpotensi basi]. Sebaliknya, jika server mengirimno-cache
yang benar-benar mengabulkan setiap permintaan oleh klien (denganmax-stale
) untuk data basi, sebagai cache HARUS memvalidasi ulang.sumber
Perbedaannya adalah bahwa tanpa cache (tidak menyimpan di Firefox) mencegah segala jenis caching. Itu dapat berguna untuk mencegah halaman dengan konten yang aman ditulis ke disk dan untuk halaman yang harus selalu diperbarui bahkan jika mereka dikunjungi kembali dengan tombol kembali.
max-age = 0 menunjukkan bahwa entri cache sudah usang dan memerlukan validasi ulang, tetapi tidak mencegah caching. Seringkali browser hanya memvalidasi sumber daya satu kali per sesi browser, sehingga konten mungkin tidak diperbarui sampai situs dikunjungi dalam sesi baru.
Biasanya, browser tidak akan menghapus entri cache yang kadaluwarsa, kecuali jika mereka mengklaim kembali ruang untuk konten yang lebih baru ketika cache browser penuh. Menggunakan no-store, no-cache memungkinkan entri cache dihapus secara eksplisit.
sumber
max-age=0
jika maksud Anda caching diperbolehkan tetapi sumber daya harus divalidasi ulang danno-store
jika Anda tidak ingin respons disimpan dalam cache sama sekali. Secarano-cache
acak ditunjuk untuk berarti salah satu dari ini tergantung pada vendor agen pengguna dan nomor versi dan protokol transfer.