it-swarm.asia

Apa perbedaan antara Kontrol-Cache: max-age = 0 dan no-cache?

Header Cache-Control: max-age=0 menyiratkan bahwa konten dianggap basi (dan harus diambil kembali) segera, yang berlaku sama dengan Cache-Control: no-cache.

585
rubyruy

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 header Cache-Control. 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 sehingga mereka HARUS memvalidasi ulang respons (mis. dengan header If-Not-Modified) sebelum menggunakan salinan yang di-cache, sedangkan, no-cache memberi tahu mereka bahwa mereka MUST divalidasi ulang sebelum menggunakan salinan yang di-cache. Dari 14.9.1 Apa itu Cacheable :

tanpa cache

... cache TIDAK HARUS menggunakan respons untuk memenuhi permintaan berikutnya tanpa validasi ulang dengan server Origin. Ini memungkinkan server Asal untuk mencegah caching bahkan oleh cache yang telah dikonfigurasi untuk mengembalikan respons basi ke permintaan klien.

Dengan kata lain, cache terkadang dapat memilih untuk menggunakan respons basi (meskipun saya yakin mereka harus menambahkan header Warning), tetapi no-cache mengatakan mereka tidak diizinkan menggunakan respons basi, apa pun yang terjadi. Mungkin Anda ingin HARUS - memvalidasi ulang perilaku ketika statistik bisbol dihasilkan dalam sebuah halaman, tetapi Anda menginginkan MUST - memvalidasi ulang perilaku ketika Anda menghasilkan respons terhadap pembelian e-commerce.

Meskipun Anda benar dalam komentar ketika Anda mengatakan no-cache tidak seharusnya mencegah penyimpanan, sebenarnya mungkin ada perbedaan lain saat menggunakan no-cache. Saya menemukan sebuah halaman, Cache Control Directive Demystified , yang mengatakan (Saya tidak dapat menjamin kebenarannya):

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. Kami menduga bahwa perubahan ini dipicu oleh penggunaan direktif ini secara luas (dan salah) untuk mencegah caching.

...

Perhatikan bahwa akhir-akhir ini, "cache-control: no-cache" juga sudah mulai berperilaku seperti arahan "no-store".

Sebagai tambahan, tampak bagi saya bahwa Cache-Control: max-age=0, must-revalidate pada dasarnya harus berarti hal yang sama dengan Cache-Control: no-cache. Jadi mungkin itu cara untuk mendapatkan MUST - memvalidasi ulang perilaku no-cache, sambil menghindari migrasi nyata dari no-cache untuk melakukan hal yang sama seperti no-store ( mis. tidak ada caching sama sekali)?


Saat dikirim oleh agen pengguna

Saya percaya jawaban shahkalpesh berlaku untuk sisi agen pengguna. Anda juga dapat melihat 13.2.6 Disambiguating Multiple Responses .

Jika agen pengguna mengirimkan permintaan dengan Cache-Control: max-age=0 (alias. "Validasi ulang ujung-ke-ujung"), maka setiap cache sepanjang jalan akan memvalidasi ulang entri cache-nya (mis. Dengan header If-Not-Modified) sampai ke server Origin. 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 HARUS TIDAK menggunakan salinan yang di-cache ketika merespons.

551
Michael Krebs

sia maks =

Ini sama dengan mengklik Refresh , yang berarti, beri saya salinan terbaru kecuali saya sudah memiliki salinan terbaru.

no-cache

Ini menahan Shift sambil mengklik Refresh, yang berarti, cukup ulangi semua apa pun yang terjadi.

48
Gunnar Cheng

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 pada tekan mundur/maju. Jika tanpa-cache digunakan, sumber daya akan diambil ulang.

Rincian lebih lanjut tentang caching IE9 dapat dilihat pada ini msdn caching posting blog .

33
El Yobo

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 Origin. IE8 memperlakukan respons no-cache dengan semantik yang sama dengan max-age=0,must-revalidate. Firefox 3.5, bagaimanapun, tampaknya memperlakukan no-cache sebagai setara dengan no-store, yang menyebalkan untuk kinerja dan penggunaan bandwidth.

Squid Cache, secara default, tampaknya tidak pernah menyimpan apa pun dengan header no-cache, seperti Firefox.

Saran saya adalah mengatur public,max-age=0 untuk 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, gunakan private,max-age=0.

Saya akan menghindari penggunaan no-cache sepenuhnya, karena tampaknya telah dibastardisasi oleh beberapa browser dan cache populer dengan fungsional yang setara dengan no-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 atau no-cache secara acak tergantung pada sumber daya.

26
rmalayter
 max-age 
 Ketika cache perantara dipaksa, dengan menggunakan arahan max-age = 0, untuk memvalidasi ulang 
 entri cache sendiri, dan klien telah memasok sendiri validator dalam permintaan, validator yang disediakan 
 mungkin berbeda dari validator yang saat ini disimpan dengan entri cache. 
 Dalam hal ini, cache MUNGKIN menggunakan salah satu validator dalam membuat permintaannya sendiri tanpa 
 Memengaruhi transparansi semantik. 
 
 Namun, pilihan validator dapat memengaruhi kinerja. Pendekatan terbaik adalah untuk cache perantara 
 Untuk menggunakan validatornya sendiri saat mengajukan permintaan. Jika server membalas 
 Dengan 304 (Tidak Dimodifikasi), maka cache dapat mengembalikan salinannya yang sekarang divalidasi ke klien 
 Dengan respons 200 (OK). Namun, jika server membalas dengan validator entitas dan cache yang baru, 
, Cache perantara dapat membandingkan validator yang dikembalikan dengan yang disediakan di 
 Permintaan klien, menggunakan fungsi perbandingan yang kuat. Jika validator klien adalah 
 Sama dengan server Origin, maka cache perantara hanya mengembalikan 304 (Tidak 
 Diubah). Jika tidak, ia mengembalikan entitas baru dengan respons 200 (OK). 

 Jika permintaan menyertakan arahan no-cache, itu TIDAK HARUS menyertakan min-fresh, 
 Max-basi, atau max-age. 

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

19
shahkalpesh

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 kondisi 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 orang datang dan tidak tahu mengapa mereka mendapatkan kesalahan sesi dengan khususnya iPhone dan iPad, yang tampaknya sejauh ini menjadi 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 lalu memeriksa tanggal modifikasi terakhir 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 perlukan 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, kebanyakan MSIE/Firefox, tidak melakukan apa yang diperintahkan kepada mereka, 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.

12
Lizardx

Saya bukan ahli caching, tapi Mark Nottingham. Ini dia dokumen caching . Ia juga memiliki tautan yang sangat baik di bagian Referensi.

Berdasarkan bacaan saya tentang dokumen-dokumen itu, sepertinya max-age=0 dapat memungkinkan cache untuk mengirim respons yang di-cache ke permintaan yang masuk pada "waktu yang sama" di mana "waktu yang sama" berarti cukup dekat bersama-sama mereka terlihat simultan dengan cache, tetapi no-cache tidak akan.

12
Hank Gay

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 ruang untuk konten yang lebih baru ketika cache browser penuh. Menggunakan no-store, no-cache memungkinkan entri cache dihapus secara eksplisit.

0
HttpWatchSupport