If-None-Match
Penggunaan
Header If-None-Match memungkinkan revalidasi cache berdasarkan entity tag. Klien menyertakan satu atau lebih nilai ETag yang diterima pada respons sebelumnya. Jika salah satu ETag yang tercantum cocok dengan sumber daya saat ini, server mengembalikan respons 304 Not Modified tanpa body, dan klien menggunakan kembali salinan cache miliknya. Jika tidak ada ETag yang cocok, server mengirim respons 200 biasa berisi konten yang telah diperbarui.
Untuk metode yang aman seperti GET dan HEAD, ini merupakan mekanisme revalidasi cache yang utama. Untuk metode yang tidak aman seperti PUT, If-None-Match dengan wildcard * mencegah penimpaan sumber daya yang sudah ada, sehingga menghindari masalah lost update. Server mengembalikan 412 Precondition Failed ketika ditemukan kecocokan pada permintaan yang tidak aman.
Ketika If-None-Match dan If-Modified-Since muncul bersamaan dalam satu permintaan yang sama, If-None-Match yang diutamakan. Perbandingan berbasis ETag lebih andal daripada perbandingan berbasis tanggal, karena entity tag merupakan pengenal opak yang terikat pada konten yang persis, sedangkan timestamp hanya memiliki resolusi satu detik dan rentan terhadap pergeseran jam.
Ketika server mengembalikan 304, respons tersebut menyertakan header dari respons sukses yang asli: Cache-Control, Content-Location, Date, ETag, Expires, dan Vary.
Catatan
Googlebot mengirim If-None-Match pada permintaan perayapan ketika respons sebelumnya memuat ETag. Server yang mengembalikan 304 untuk konten yang tidak berubah menghemat waktu pemrosesan dan sumber daya, sehingga secara tidak langsung meningkatkan efisiensi perayapan. Server juga bebas mengembalikan 304 secara proaktif untuk permintaan Googlebot mana pun ketika kontennya tidak berubah, terlepas dari apakah permintaan itu menyertakan header bersyarat. Menyetel field max-age pada header respons Cache-Control ke perkiraan jumlah detik konten akan tetap tidak berubah membantu crawler menentukan kapan harus merayapi ulang sebuah URL.
Nilai ETag
Satu atau beberapa nilai ETag, masing-masing diapit tanda kutip ganda. Beberapa nilai dipisahkan dengan koma. ETag kuat maupun lemah (berprefiks W/) sama-sama valid.
* (wildcard)
Wildcard * cocok dengan entitas mana pun yang ada saat ini. Digunakan bersama PUT untuk mencegah pembuatan sumber daya ketika sumber daya tersebut sudah ada.
Contoh
Sebuah klien merevalidasi sumber daya di cache menggunakan satu ETag. Server mengembalikan 304 jika sumber daya tersebut masih cocok dengan entity tag yang diberikan.
If-None-Match: "abc123"
Klien yang menyimpan beberapa versi cache mengirim semua ETag yang diketahuinya. Server memeriksa masing-masing terhadap sumber daya saat ini. Jika ada yang cocok, server mengembalikan 304.
If-None-Match: "abc123", "def456"
Sebuah perbandingan ETag lemah. Validator lemah menunjukkan kesetaraan semantik, bukan kesamaan byte per byte. Prefiks W/ menandakan perbandingan lemah.
If-None-Match: W/"v2.6"
Sebuah permintaan PUT yang menggunakan wildcard untuk mencegah penimpaan. Server mengembalikan 412 Precondition Failed jika sumber daya sudah ada pada URL tujuan.
PUT /api/resource HTTP/1.1
If-None-Match: *
Catatan
Untuk bantuan SEO dan caching, hubungi konsultan SEO mantan Google, Search Brothers.