Apa yang bisa menjadi perbedaan antara jika-diubah-sejak dan jika-tidak ada-cocok? Saya merasa jika-tidak ada-cocok digunakan untuk file sedangkan jika-diubah-sejak digunakan untuk halaman?
Jawaban:
Mengenai perbedaan antara Last-Modified/If-Modified-Sincedan ETag/If-None-Match:
Keduanya dapat digunakan secara bergantian. Namun, bergantung pada jenis sumber daya, dan bagaimana sumber daya dibuat di server, satu atau pertanyaan lain ("apakah ini telah diubah sejak ...?" / "Apakah ini masih cocok dengan ETag ini?") Mungkin lebih mudah dijawab .
Contoh:
mtimesebagai Last-Modifiedtanggal adalah solusi paling sederhana.ETagakan jauh lebih mudah. Lihat tautan berikut untuk detail lebih lanjut tentang topik:
If-Modified-Sincedibandingkan dengan Last-Modifiedsedangkan If-None-Matchdibandingkan dengan ETag. Keduanya Modified-Sincedan ETagdapat digunakan untuk mengidentifikasi varian spesifik dari sebuah resource.
Tetapi perbandingan If-Modified-Sinceuntuk Last-Modifiedmemberi Anda informasi apakah varian yang di-cache lebih lama atau lebih baru sedangkan perbandingan If-None-Matchuntuk ETaghanya memberi Anda informasi apakah keduanya identik atau tidak. Selain itu, sebagian besar ETaggenerator menyertakan informasi dari inode khusus sistem sehingga memindahkan file ke drive yang berbeda juga dapat mengubah ETag.
Nilai stempel waktu yang digunakan dalam Last-Modified / If-Modified-Because memiliki ketepatan yang terbatas - satu detik dan itu tidak cukup untuk mengubah konten dengan cepat seperti, misalnya, aplikasi obrolan web di mana lebih dari satu pesan dapat diposting pada detik tertentu . ETag / If-None-Match dapat membantu memecahkan masalah itu.
Seperti yang dinyatakan dalam praktik terbaik Google:
Penting untuk menentukan salah satu dari Expires atau Cache-Control max-age, dan salah satu dari Last-Modified atau ETag, untuk semua sumber daya yang dapat disimpan dalam cache. Menentukan Expires dan Cache-Control: max-age, atau menentukan Last-Modified dan ETag adalah hal yang berlebihan.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modifieddengan ETag(atau, di sisi agen pengguna, If-Modified-Sincedengan If-None-Match) disebutkan. Demikian pula spesifikasi W3 tidak membatasi Anda. Dikatakan untuk tidak digunakan If-Modified-Sincedengan If-Match, tetapi saya berasumsi itu karena kumpulan dokumen yang memiliki tanggal diperbarui tetapi konten yang sama seperti yang ditentukan oleh ETag harus cukup kecil.
Jika-Dimodifikasi-Sejak menggunakan tanggal, sedangkan If-None-Match menggunakan ETag . Keduanya dapat digunakan untuk "halaman" (yaitu HTML) dan file lainnya.
Kecuali dinyatakan lemah oleh server, ETag dianggap sebagai validator yang kuat, dan karenanya dapat digunakan untuk memenuhi permintaan rentang bersyarat. Namun, sebagian besar ETag yang dibuat secara otomatis menunjukkan kesulitan dalam situasi server farm, karena mereka sering menggunakan informasi inode dan / atau penghitung persisten unik. Dalam praktiknya, saya telah menemukan tajuk Last Modified cukup untuk konten yang cukup statis, misalnya menyajikan konten statis yang dilindungi, karena waktu penulisan file menjadi validator yang cukup baik.
ETag sejauh ini adalah yang paling fleksibel. Klien yang sesuai diharuskan untuk mengirim ETag dalam permintaan bersyarat, sedangkan mereka HARUS mengirim keduanya jika tersedia.
Header Jika-Dimodifikasi-Sejak digunakan untuk menentukan waktu saat browser terakhir menerima sumber daya yang diminta. Header If-None-Match digunakan untuk menentukan tag entitas yang dikeluarkan server dengan sumber daya yang diminta saat terakhir kali diterima.
Dalam dua cara yang dijelaskan, header ini digunakan untuk mendukung caching konten dalam browser, dan mereka memungkinkan server untuk menginstruksikan browser untuk menggunakan salinan sumber daya yang di-cache, daripada merespons dengan konten penuh dari sumber daya jika ini adalah tidak perlu.