Memahami Respons 304 Not Modified
dalam HTTP Caching
Saat mengembangkan aplikasi web, penanganan sumber daya yang efisien sangat penting untuk performa, terutama dalam hal akses file dan caching browser. Salah satu cara untuk mengoptimalkan proses ini adalah dengan memanfaatkan respons HTTP 304 Not Modified
secara benar. Respons ini memberi tahu browser bahwa sumber daya yang diminta tidak berubah sejak terakhir kali diambil, memungkinkan browser untuk terus menggunakan versi cached-nya daripada mengunduhnya lagi. Namun, bagaimana Anda tahu kapan harus mengirimkan respons ini? Mari kita uraikan langkah demi langkah.
Header HTTP Kunci untuk Diperiksa
Untuk menentukan apakah akan mengirim respons 304 Not Modified
, Anda perlu memeriksa header HTTP tertentu yang dikirim oleh browser klien. Dua header utama yang perlu diperhatikan adalah:
- Etag: Header ini berfungsi sebagai pengidentifikasi unik untuk sebuah sumber daya pada versi tertentu. Browser membandingkan Etag yang di-cache dengan Etag dari server untuk melihat apakah keduanya cocok.
- If-None-Match: Header ini dikirim oleh browser dan berisi nilai Etag yang di-cache. Jika sumber daya tidak berubah, server dapat merespons dengan
304
.
Apa yang Harus Diperhatikan
- Jika Etag dari browser ada: Jika browser menyertakan header
Etag
atauIf-None-Match
dalam permintaan, ini menunjukkan bahwa ia memiliki versi sumber daya yang di-cache sebelumnya. - Pertimbangan Pengutipan: Browser terkadang mengutip nilai Etag. Pastikan untuk menghapus kutipan ini sebelum perbandingan.
Header yang Diperlukan untuk Respons Awal
Ketika mengirimkan sumber daya untuk pertama kalinya (biasanya dengan respons 200 OK
), sangat penting untuk menyertakan header yang relevan yang memberi tahu browser tentang kondisi sumber daya:
- Last-Modified: Menunjukkan waktu terakhir sumber daya diubah. Ini dapat menjadi alternatif pengecekan untuk validasi cache bersamaan dengan Etag.
- Etag (seperti yang disebutkan sebelumnya): Ini harus dihasilkan untuk sumber daya tersebut dan disertakan dalam header respons untuk memfasilitasi validasi cache di masa depan.
Mengimplementasikan Logika
Berikut adalah contoh pseudocode yang disederhanakan yang menggambarkan cara mengimplementasikan logika untuk mengirim respons 304 Not Modified
:
server_etag = gen_etag_for_this_file(myfile)
etag_from_browser = get_header("Etag")
if etag_from_browser tidak ada:
etag_from_browser = get_header("If-None-Match")
if browser telah mengutip etag:
hapus kutipan (misalnya "foo" --> foo)
set server_etag ke header http
if etag_from_browser cocok dengan server_etag
kirim kode kembali 304 ke browser
Contoh Cuplikan Logika Server
Berikut cara Anda dapat mengimplementasikan ini dalam logika server Anda:
/* klien harus mengatur Etag atau If-None-Match */
mketag(etag, &sb);
etagin = apr_table_get(r->headers_in, "Etag");
if (etagin == NULL)
etagin = apr_table_get(r->headers_in, "If-None-Match");
if (etag != NULL && etag[0] == '"') {
/* Hapus kutipan jika ada */
int sl;
sl = strlen(etag);
memmove(etag, etag+1, sl+1);
etag[sl-2] = 0;
}
apr_table_add(r->headers_out, "ETag", etag);
if (etagin != NULL && strcmp(etagin, etag) == 0) {
/* Jika etag cocok, kembalikan status 304 */
rc = HTTP_NOT_MODIFIED;
}
Pemikiran Akhir
Dengan mengetahui bagaimana dan kapan mengirim respons 304 Not Modified
, Anda dapat secara efektif mengurangi beban server dan meningkatkan pengalaman pengguna. Jangan lupa pentingnya menyertakan header Etag
dan Last-Modified
selama respons awal untuk memungkinkan klien membuat permintaan validasi cache yang akurat. Jika Anda memiliki pertanyaan tentang pembuatan Etag atau memerlukan bantuan lebih lanjut dalam implementasi, jangan ragu untuk menghubungi untuk contoh yang lebih detail. Selamat coding!