Respons server 304 Not Modified
Karakteristik Utama Kode Status HTTP 304
Kode status HTTP 304 (Not Modified) adalah respon dari server yang menunjukkan bahwa sumber daya yang diminta tidak berubah sejak permintaan terakhir dari klien. Kode ini digunakan untuk mengoptimalkan penggunaan caching, yang memungkinkan penghindaran pengiriman data yang tidak berubah.
Definisi dan Tujuan
Kode status 304 menunjukkan kepada klien bahwa versi yang di-cache dari sumber daya masih valid dan tidak perlu diunduh ulang. Ini menghemat bandwidth dan mempercepat waktu muat halaman.
Bagaimana Mekanisme Caching Bekerja dengan Menggunakan 304
Mekanisme caching bekerja dengan menyimpan salinan sumber daya di sisi klien. Saat klien mengirim permintaan baru, ia menyertakan informasi tentang versi yang tersimpan. Jika sumber daya tidak berubah, server merespons dengan 304, yang memungkinkan klien menggunakan versi cache mereka.
Ketentuan di Mana Server Mengembalikan Status 304
- Klien mengirimkan permintaan dengan header If-Modified-Since atau If-None-Match.
- Sumber daya di server belum dimodifikasi sejak waktu yang ditentukan dalam permintaan.
- Server memiliki mekanisme untuk memeriksa modifikasi sumber daya secara efisien.
Contoh Praktis Penggunaan Kode Status 304
Contoh dengan Caching Gambar di Website
Ketika pengguna mengakses gambar di website, browser menyimpannya dalam cache. Saat pengguna mengakses gambar yang sama lagi, browser mengirimkan header If-Modified-Since untuk memverifikasi apakah gambar tersebut telah berubah.
Bagaimana Browser Menyimpan Cache
Browser menyimpan respons dari server dan mencatat waktu modifikasi terakhir. Jika gambar tidak berubah, server akan mengirimkan kode 304.
Perilaku pada Permintaan Ulang
Pada permintaan ulang, jika gambar tidak dimodifikasi, browser menggunakan versi yang ada di cache tanpa mengunduh ulang, sehingga menghemat waktu dan bandwidth.
Contoh dengan API
Kode status 304 juga dapat digunakan untuk mengoptimalkan permintaan ke API dengan cara yang sama. Ketika klien meminta data, server dapat memeriksa apakah data telah diubah sejak permintaan terakhir dan merespons dengan 304 jika tidak ada perubahan.
Contoh dengan Header If-Modified-Since dan If-None-Match
Header If-Modified-Since mengandung waktu modifikasi terakhir yang diketahui oleh klien, sementara If-None-Match berisi ETag sumber daya. Jika sumber daya tidak berubah, server akan merespons dengan kode 304.
Memperbaiki Masalah dengan Kode 304 di Berbagai Bahasa Pemrograman
PHP
Dalam PHP, Anda dapat mengatur header untuk caching dengan menggunakan fungsi header().
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=3600");
Berikut adalah contoh kode untuk memeriksa permintaan dan mengembalikan status 304:
if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lastModified) {
header("HTTP/1.1 304 Not Modified");
exit;
}
Python (Flask)
Dalam Flask, Anda dapat mengatur caching dan menangani status 304 dengan cara berikut:
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/resource')
def resource():
last_modified = 'Wed, 21 Oct 2015 07:28:00 GMT'
response = make_response("Data Anda")
response.headers['Last-Modified'] = last_modified
if request.headers.get('If-Modified-Since') == last_modified:
return '', 304
return response
Node.js (Express)
Untuk mengelola permintaan dengan menggunakan status 304 di Node.js dengan Express, Anda dapat menggunakan kode berikut:
app.get('/resource', (req, res) => {
const lastModified = new Date('Wed, 21 Oct 2015 07:28:00 GMT');
res.set('Last-Modified', lastModified.toUTCString());
if (req.headers['if-modified-since'] === lastModified.toUTCString()) {
return res.status(304).end();
}
res.send("Data Anda");
});
Kesalahan Umum dan Cara Mengatasinya
Pengaturan Caching yang Salah di Server
Pengaturan caching yang tidak tepat dapat menyebabkan server tidak mengirimkan status 304 ketika seharusnya. Pastikan bahwa header yang tepat telah diatur dan waktu modifikasi sumber daya diperiksa dengan benar.
Kesalahan dalam Header Permintaan
Kesalahan dalam penggunaan header If-Modified-Since atau If-None-Match dapat menyebabkan masalah. Pastikan bahwa klien mengirimkan header ini dengan benar.
Cara Memeriksa dan Meng-debug Status 304
Anda dapat menggunakan alat seperti Postman atau curl untuk menguji dan memeriksa header respons server. Memastikan bahwa semua header diatur dengan benar adalah langkah penting dalam proses debugging.