Saya sudah melihat-lihat tetapi belum bisa mencari tahu apakah saya harus menggunakan keduanya ETag dan sebuah Berakhir header atau satu atau yang lain.
Apa yang saya coba lakukan adalah memastikan bahwa file flash saya (dan gambar lain dan apa yang tidak hanya diperbarui ketika ada perubahan pada file-file itu.
Saya tidak ingin melakukan sesuatu yang istimewa seperti mengganti nama file atau meletakkan beberapa karakter aneh di akhir url agar tidak di-cache.
Juga, adakah yang perlu saya lakukan secara programatik pada skrip PHP saya untuk mendukung ini atau itu semua Apache?
http
caching
etag
expires-header
GeoffreyF67
sumber
sumber
Jawaban:
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.
sumber
Header Etag dan Last-modified adalah validator .
Mereka membantu browser dan / atau cache (reverse proxy) untuk memahami apakah suatu file / halaman, telah berubah, bahkan jika itu mempertahankan nama yang sama.
Kedaluwarsa dan Kontrol-cache memberikan informasi penyegaran .
Ini berarti bahwa mereka menginformasikan, browser dan membalikkan di antara proxy, sampai berapa lama atau berapa lama, mereka dapat menyimpan halaman / file di cache mereka.
Jadi pertanyaannya biasanya adalah yang validator mana yang harus digunakan, etag atau terakhir dimodifikasi, dan yang menyegarkan header informasi untuk menggunakan, kedaluwarsa atau kontrol cache.
sumber
Expires
danCache-Control
"header caching yang kuat"Last-Modified
danETag
"header caching lemah"Pertama-tama browser memeriksa
Expires/Cache-Control
untuk menentukan apakah akan membuat permintaan ke server atau tidakJika harus membuat permintaan, itu akan mengirimkan
Last-Modified/ETag
permintaan HTTP. JikaEtag
nilai dokumen cocok dengan itu, server akan mengirim kode 304 bukan 200, dan tidak ada konten. Browser akan memuat konten dari cache-nya.sumber
Secara default, Apache akan menghasilkan Etag berdasarkan nomor inode file, tanggal modifikasi terakhir, dan ukuran, yang seharusnya baik-baik saja untuk melakukan apa yang Anda inginkan. Saya pikir itu juga akan menghasilkan secara default header dimodifikasi terakhir berdasarkan waktu modifikasi terakhir dari file pada disk, yang juga sangat baik untuk melakukan apa yang Anda inginkan.
Anda mungkin juga harus meminta Apache mengirim tajuk Kedaluwarsa bertanggal satu tahun di masa mendatang (menurut http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21 ) sehingga browser tahu kontennya adalah dapat disimpan dalam cache Lihatlah mod_expires untuk mengonfigurasinya.
sumber
Ringkasan lain:
Anda harus menggunakan keduanya. ETag adalah informasi "sisi server". Kedaluwarsa adalah caching "Sisi klien".
Gunakan ETag kecuali jika Anda memiliki server beban-seimbang. Mereka aman dan akan memberi tahu klien bahwa mereka harus mendapatkan versi baru dari file server Anda setiap kali Anda mengubah sesuatu di sisi Anda.
Kedaluwarsa harus digunakan dengan hati-hati, seolah-olah Anda menetapkan tanggal kedaluwarsa jauh di masa depan tetapi ingin mengubah salah satu file dengan segera (misalnya file JS), beberapa pengguna mungkin tidak mendapatkan versi modifikasi sampai waktu yang lama!
sumber
Satu hal tambahan yang ingin saya sebutkan bahwa beberapa jawaban mungkin terlewatkan adalah kerugian memiliki keduanya
ETags
danExpires/Cache-control
di header Anda.Tergantung pada kebutuhan Anda, itu mungkin hanya menambahkan byte tambahan di header Anda yang dapat meningkatkan paket yang berarti lebih banyak TCP overhead. Sekali lagi, Anda harus melihat apakah overhead memiliki kedua hal di header Anda diperlukan atau hanya menambah berat dalam permintaan Anda yang mengurangi kinerja.
Anda dapat membaca lebih lanjut tentang hal ini di posting blog yang luar biasa ini oleh Kyle Simpson: http://calendar.perfplanet.com/2010/bloated-request-response-headers/
sumber
Dalam pandangan saya, Dengan Expire Header, server dapat memberi tahu klien kapan data saya akan basi, sementara dengan Etag, server akan memeriksa nilai etag untuk setiap permintaan klien.
sumber
ETag digunakan untuk menentukan apakah suatu sumber daya harus menggunakan salinan itu. dan Expire Header seperti Cache-Control memberi tahu klien bahwa sebelum dekade cache, klien harus mengambil sumber daya lokal.
Di situs modern, Ada sering menawarkan file bernama hash, suka
app.98a3cf23.js
, sehingga merupakan praktik yang baik untuk menggunakan Expires Header. Selain itu, ini juga mengurangi biaya jaringan.Semoga ini membantu;)
sumber