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-Since
dan 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:
mtime
sebagai Last-Modified
tanggal adalah solusi paling sederhana.ETag
akan jauh lebih mudah. Lihat tautan berikut untuk detail lebih lanjut tentang topik:
If-Modified-Since
dibandingkan dengan Last-Modified
sedangkan If-None-Match
dibandingkan dengan ETag
. Keduanya Modified-Since
dan ETag
dapat digunakan untuk mengidentifikasi varian spesifik dari sebuah resource.
Tetapi perbandingan If-Modified-Since
untuk Last-Modified
memberi Anda informasi apakah varian yang di-cache lebih lama atau lebih baru sedangkan perbandingan If-None-Match
untuk ETag
hanya memberi Anda informasi apakah keduanya identik atau tidak. Selain itu, sebagian besar ETag
generator 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-Modified
dengan ETag
(atau, di sisi agen pengguna, If-Modified-Since
dengan If-None-Match
) disebutkan. Demikian pula spesifikasi W3 tidak membatasi Anda. Dikatakan untuk tidak digunakan If-Modified-Since
dengan 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.