Mereka sedikit berbeda - ETag tidak memiliki informasi apa pun yang dapat digunakan klien untuk menentukan apakah akan membuat permintaan untuk file itu lagi di masa mendatang. Jika hanya ETag yang dimilikinya, ia harus selalu membuat permintaan. Namun, ketika server membaca ETag dari permintaan klien, server kemudian dapat menentukan apakah akan mengirim file (HTTP 200) atau memberi tahu klien untuk hanya menggunakan salinan lokal mereka (HTTP 304). ETag pada dasarnya hanya sebuah checksum untuk file yang berubah secara semantik ketika konten file berubah.
Header Kedaluwarsa digunakan oleh klien (dan proksi / cache) untuk menentukan apakah perlu atau tidak membuat permintaan ke server sama sekali. Semakin dekat Anda dengan tanggal Kedaluwarsa, semakin besar kemungkinan klien (atau proxy) akan membuat permintaan HTTP untuk file itu dari server.
Jadi sebenarnya yang ingin Anda lakukan adalah menggunakan KEDUA header - atur header Expires ke nilai yang masuk akal berdasarkan seberapa sering konten berubah. Kemudian konfigurasikan ETag yang akan dikirim sehingga ketika klien DO mengirim permintaan ke server, ia dapat lebih mudah menentukan apakah akan mengirim file kembali atau tidak.
Satu catatan terakhir tentang ETag - jika Anda menggunakan pengaturan server yang seimbang dengan beberapa mesin yang menjalankan Apache Anda mungkin ingin mematikan generasi ETag. Ini karena inode digunakan sebagai bagian dari algoritma hash ETag yang akan berbeda antara server. Anda dapat mengonfigurasi Apache untuk tidak menggunakan inode sebagai bagian dari perhitungan, tetapi kemudian Anda ingin memastikan cap waktu pada file persis sama, untuk memastikan ETag yang sama dihasilkan untuk semua server.