[Http] كيف يعمل "304 غير معدل"؟


Answers

Last-Modified: تاريخ التعديل الأخير للكائن المطلوب

If-Modified-Since: Allows a 304 Not Modified to be return if last last modified is uncgedged.

ETag: ETag هو معرف غير شفاف يتم تعيينه بواسطة خادم ويب إلى إصدار محدد من مورد موجود في عنوان URL. إذا تم تغيير تمثيل المورد في عنوان URL هذا ، يتم تعيين ETag جديدة ومختلفة.

If-None-Match: يسمح بـ 304 غير معدلة ليتم إرجاعه إذا لم يتغير ETag.

ذاكرة التخزين المؤقت لمستعرض المتصفح مع تاريخ (آخر تعديل) أو معرف (ETag) ، عندما تحتاج إلى طلب عنوان URL مرة أخرى ، يرسل المتصفح رسالة طلب مع العنوان:

سيعود الخادم 304 عندما تكون العبارة if False ، وسيستخدم المتصفح ذاكرة التخزين المؤقت.

Question
  • كيف يتم إنشاء "304 غير معدلة"؟

  • كيف يحدد المتصفح ما إذا كان الرد على طلب http هو 304؟

  • هل تم تحديده من قبل المتصفح أو إرساله من الخادم؟

  • في حالة إرسالها بواسطة الخادم ، كيف يعرف الخادم البيانات المتوفرة في ذاكرة التخزين المؤقت ، وكذلك كيف يتم تعيين 304 إلى صورة؟

تخميني ، إذا تم إنشاؤه من قبل المتصفح

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 data
  // what is that algorithm.?
      return result;
}

console.log(is_modified());

إنني أعتمد على مزود API لجهة خارجية للحصول على البيانات وتحليلها والدفع بها إلى DB. قد تتغير البيانات أو لا تتغير أثناء كل طلب ، ولكن العنوان دائمًا يرسل 200 ، لا أريد تحليل ، تحقق من معرف الفريدة الأخير في DB وما إلى ذلك .. لتحديد التغيير في البيانات ، ولا مقارنة النتيجة مباشرة بدلاً من ذلك أنا md5() ، sha1() و crc32() حسمت النتيجة ويعمل بشكل جيد ، ولكن يتساءل عن الخوارزمية لتحديد 304 .

أرغب في استخدام نفس نوع الخوارزمية لتحديد التغيير في البيانات.