Bagaimana tanggapan "304 Tidak Dimodifikasi" dihasilkan?
Bagaimana cara browser menentukan apakah respons terhadap permintaan HTTP adalah 304?
Apakah diatur oleh browser atau dikirim dari server?
Jika dikirim oleh server, bagaimana server mengetahui data yang tersedia dalam cache, juga bagaimana cara mengatur 304 ke gambar?
Dugaan saya, jika itu dihasilkan oleh browser:
function is_modified()
{
return get_data_from_cache() === get_data_from_url();
}
function get_data_from_cache()
{
return some_hash_or_xxx_function(cache_data);
}
function get_data_from_url()
{
return some_hash_or_xxx_function(new_data);
}
function some_hash_or_xxx_function(data)
{
// Do something with the data.
// What is that algorithm?
return result;
}
console.log(is_modified());
Saya mengandalkan penyedia API pihak ketiga untuk mendapatkan data, parsing & dorong ke basis data saya. Data mungkin atau mungkin tidak berubah selama setiap permintaan, tetapi tajuk selalu mengirim 200
. Saya tidak ingin menguraikan, periksa ID Unik terakhir di DB dan seterusnya ... untuk menentukan perubahan data, atau membandingkan hasilnya secara langsung, bukan saya md5()
, sha1()
dan crc32()
mengait hasilnya dan berfungsi dengan baik, tapi saya ingin tahu tentang algoritma untuk menentukan 304
.
Saya ingin menggunakan jenis algoritma yang sama untuk menentukan perubahan data saya.
sumber
Jawaban:
Saat browser memasukkan sesuatu ke dalam cache, browser juga menyimpan header
Last-Modified
atauETag
dari server.Browser kemudian mengirimkan permintaan dengan header
If-Modified-Since
atauIf-None-Match
, memberitahu server untuk mengirim 304 jika konten masih memiliki tanggal atau ETag.Server membutuhkan cara menghitung ETAG yang dimodifikasi tanggal atau untuk setiap versi sumber daya masing-masing; ini biasanya berasal dari sistem file atau kolom database terpisah.
sumber
ETag
adalah kata kunci, diperiksa dengan tajukETag
tetap sama di keduaResponse Headers
&Response Headers From Cache
, dapatkah Anda memberi tahu algoritma di belakangETag
. Saya telah memperbarui pertanyaan saya yang menyatakan kebutuhan saya.ETag
hanyalah bidang di mana server dapat menyimpan ID unik (biasanya hash atau nomor versi atau jam vektor). Sama sekali tidak membantu Anda menghitung ID itu; itu terserah kode sisi server Anda.max-age
maka apakah browser perlu membuat permintaan? (karena bisa mematikan di 304 dan tidak membuat permintaan sama sekali) ... Anda ingin ini misalnya dengan aset "sidik jari" (mereka baik selamanya). Lain apa gunanyamax-age
...cache toko browser dengan tanggal (Diubah Terakhir) atau id (ETag), ketika Anda perlu meminta URL lagi, browser mengirim pesan permintaan dengan header:
server akan mengembalikan 304 ketika pernyataan if False, dan browser akan menggunakan cache.
sumber