"304 সংশোধিত নয়" ঠিক কীভাবে কাজ করে?


174
  • কীভাবে "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 the data.
     // What is that algorithm?
     return result;
}

console.log(is_modified());

আমি ডেটা পেতে, পার্স এবং এটি আমার ডাটাবেসে ঠেকাতে তৃতীয় পক্ষের API সরবরাহকারীর উপর নির্ভর করছি। প্রতিটি অনুরোধের সময় ডেটা পরিবর্তন হতে পারে বা নাও হতে পারে, তবে শিরোনাম সবসময় প্রেরণ করে 200। আমি বিশ্লেষণ করতে চাই না, ডিবিতে সর্বশেষ ইউনিক আইডি এবং আরও কিছু পরীক্ষা করতে চাই ... তথ্যের পরিবর্তনটি নির্ধারণ করতে, বা ফলাফলের সরাসরি তুলনা না করে আমি md5(), sha1()এবং crc32()ফলাফলটি হ্যাশ করে জরিমানা করি, তবে আমি এ নিয়ে ভাবছি অ্যালগরিদম নির্ধারণ করতে 304

আমার ডেটা পরিবর্তনটি নির্ধারণ করতে আমি একই ধরণের অ্যালগরিদম ব্যবহার করতে চাই।


2
হ্যাঁ আমি কীভাবে 304 সংশোধিত কাজ করে না তার জন্য গুগল করেছি , কিন্তু কোনও উত্তর পেল না।
ভেনমভেন্ডার

1
আপনাকে কিছুটা সাধারণ হতে হবে। google.com/search?q=http%20caching
স্ল্যাक्स

উত্তর:


200

ব্রাউজার যখন কিছু তার ক্যাশে রাখে তখন এটি সার্ভার থেকে হেডার Last-Modifiedবা সংরক্ষণ ETagকরে।

তারপরে ব্রাউজারটি সামগ্রী If-Modified-Sinceবা If-None-Matchশিরোনামের সাথে ই 30 দিন থাকলে 304 প্রেরণের জন্য সার্ভারকে একটি শিরোনাম বা শিরোনামের সাথে একটি অনুরোধ প্রেরণ করে ।

সার্ভারের প্রতিটি সংস্থার প্রতিটি সংস্করণের জন্য একটি তারিখ-সংশোধিত বা ETag গণনা করার কিছু উপায় প্রয়োজন; এটি সাধারণত ফাইল সিস্টেম বা একটি পৃথক ডাটাবেস কলাম থেকে আসে।


1
ETagকীওয়ার্ডটি হেডার সঙ্গে পরীক্ষা করা হয় ETagউভয় অবশেষ একই Response Headers& Response Headers From Cache, আপনি অ্যালগরিদম পিছনে বলতে পারেন ETag। আমি আমার প্রয়োজনীয়তা উল্লেখ করে আমার প্রশ্ন আপডেট করেছি।
ভেনমভেেন্ডার

4
@ ভেনমভেন্ডার: ETagকেবলমাত্র এমন একটি ক্ষেত্র যেখানে সার্ভারটি একটি অনন্য আইডি (সাধারণত একটি হ্যাশ বা সংস্করণ নম্বর বা ভেক্টর ক্লক) সঞ্চয় করতে পারে। এটি আপনাকে কোনও আইডি গণনা করতে সহায়তা করে না; এটি আপনার সার্ভার-সাইড কোড পর্যন্ত।
স্ল্যাक्स

@ এসলাক্স: পৃষ্ঠায় একটি ডিবি কল থাকলে কী হবে ... এমন সম্ভাবনা রয়েছে যে ডিবিতে থাকা ডেটা বদলে যেত .. এই ক্ষেত্রে শেষ-সংশোধিত কলটি সঠিকভাবে পরীক্ষা করা কোনও অর্থবোধ করে না, সঠিক ?. এই অবস্থাটি কীভাবে দেখা হচ্ছে?
ব্যবহারকারী 1050619

3
@ ব্যবহারকারী 1050619: ইটাগটি সঠিক কিনা তা নিশ্চিত করা আপনার সার্ভারের উপর নির্ভর করে। আপনি যদি কোনও ডিবি থেকে ডেটা প্রদর্শন করেন তবে আপনাকে এটি অন্তর্ভুক্ত করতে হবে।
স্লাকস

একটি জিনিস যা এখনও অস্পষ্ট তা হ'ল আপনার যদি বড় max-ageথাকে তবে ব্রাউজারটির কী অনুরোধ করা দরকার? (যেহেতু এটি 304 এ আটকে যেতে পারে এবং অনুরোধটি একেবারেই করতে পারে না) ... আপনি এটি যেমন "ফিঙ্গারপ্রিন্টেড" সম্পদগুলি সহ চান (তারা চিরকাল ভাল)। অন্যথায় কী max-age...
অ্যান্ডি হেডেন

19

সর্বশেষ-সংশোধিত: অনুরোধ করা অবজেক্টের জন্য শেষ পরিবর্তিত তারিখ

যদি-সংশোধিত-যেহেতু: শেষ পরিবর্তিত তারিখটি অপরিবর্তিত থাকলে 304-কে পরিবর্তিত না হওয়ার জন্য ফেরত পাঠানোর অনুমতি দেয়।

ETag: একটি ETag হল একটি অস্বচ্ছ সনাক্তকারী যা একটি ওয়েব সার্ভারের দ্বারা URL এ পাওয়া কোনও সংস্থার নির্দিষ্ট সংস্করণে নির্ধারিত হয়। যদি সেই URL- এ উত্সের প্রতিনিধিত্ব কখনও বদল হয় তবে একটি নতুন এবং আলাদা ETag বরাদ্দ করা হবে।

যদি-কিছুই না-ম্যাচ: ETag অপরিবর্তিত থাকে তবে 304 সংশোধিত না ফেরত পাঠানোর অনুমতি দেয়।

একটি তারিখ (সর্বশেষ-সংশোধিত) বা আইডি (ইটাগ) সহ ব্রাউজার স্টোর করে ক্যাশে, যখন আপনাকে আবার ইউআরএল অনুরোধ করতে হবে, ব্রাউজারটি শিরোনাম সহ অনুরোধ বার্তা প্রেরণ করে:

এখানে চিত্র বর্ণনা লিখুন

সার্ভিস 304 ফিরে আসবে যখন যদি বিবৃতিটি মিথ্যা হয় এবং ব্রাউজারটি ক্যাশে ব্যবহার করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.