এইচটিটিপি স্থিতি কোড 200 (ক্যাশে) বনাম স্থিতি কোড 304 এর মধ্যে পার্থক্য কী?


201

আমি আমার ওয়েবসাইট অ্যাক্সেস করতে ফায়ারফক্সের জন্য গুগল "পৃষ্ঠা গতি" প্লাগ-ইন ব্যবহার করছি।

আমার পৃষ্ঠার কিছু উপাদান HTTP স্থিতি হিসাবে নির্দেশিত:

200 200 (ক্যাশে) 304

গুগলের "পৃষ্ঠার গতি" দ্বারা।

আমি যা সম্পর্কে বিভ্রান্ত তা হ'ল 200 (ক্যাশে) এবং 304 এর মধ্যে পার্থক্য।

আমি পৃষ্ঠাটি একাধিকবার রিফ্রেশ করেছি (তবে আমার ক্যাশেটি সাফ করে নি) এবং সর্বদা মনে হয় যে আমার ফেভিকন.ইকো এবং কয়েকটি চিত্র হ'ল স্থিতি = 200 (ক্যাশে) যখন অন্য কিছু চিত্রের পোস্টের স্থিতি 304।

পার্থক্য কেন বুঝতে পারছি না।

আপডেট :

গুগল "পৃষ্ঠার গতি" ব্যবহার করে, আমি http://example.com/favicon.ico পাশাপাশি http://cdn.example.com/js/ga.js এর জন্য একটি "200 (ক্যাশে)" পেয়েছি

তবে, আমি http://cdn.example.com/js/combined.min.js এর জন্য একটি "304" স্থিতি পেয়েছি

আমি বুঝতে পারি না কেন আমার কাছে দুটি জাভাস্ক্রিপ্ট ফাইল একই ডিরেক্টরি / জেএস / এ থাকা আছে, একটিতে একটি HTTP স্থিতি 304 এবং অন্যটি 200 (ক্যাশে) স্থিতি কোড ফেরত রয়েছে।

উত্তর:


220

কোড "200 (ক্যাশে)" সহ আইটেমগুলি সরাসরি আপনার ব্রাউজারের ক্যাশে থেকে পূর্ণ হয়েছিল, এর অর্থ হ'ল আইটেমগুলির জন্য মূল অনুরোধগুলি শিরোনামগুলি দিয়ে ফিরে আসে যাতে বোঝা যায় যে ব্রাউজার তাদেরকে ক্যাশে করতে পারে (যেমন ভবিষ্যতের তারিখ Expiresবা Cache-Control: max-ageশিরোনাম) এবং এটিতে আপনি যখন নতুন অনুরোধটি ট্রিগার করেছিলেন, সেই ক্যাশেড বস্তুগুলি এখনও স্থানীয় ক্যাশে সঞ্চিত ছিল এবং এখনও এর মেয়াদ শেষ হয়নি।

অন্যদিকে, 304s হ'ল সার্ভারের প্রতিক্রিয়া হ'ল ব্রাউজারটি চেক করেছে যে কোনও ফাইলের সর্বশেষ সংস্করণটি যা ক্যাশে করেছিল সেটির পরে পরিবর্তন হয়েছে কিনা (উত্তরটি "না")।

সর্বাধিক অনুকূল ওয়েব পারফরম্যান্সের জন্য, আপনি সমস্ত সম্পত্তির জন্য একটি সুদূর ভবিষ্যতের Expires:বা Cache-Control: max-ageশিরোনাম স্থাপন করা সেরা , এবং তারপরে যখন কোনও সম্পদ পরিবর্তনের প্রয়োজন হয়, সম্পত্তির আসল ফাইলের নাম পরিবর্তন করা বা সেই সম্পত্তির জন্য অনুরোধগুলিতে কোনও সংস্করণ স্ট্রিং সংযোজন করা উচিত। এটি কোনও অনুরোধ করার প্রয়োজনীয়তা বাদ দেয় যদি না সম্পদটি অবশ্যই ক্যাশে সংস্করণ থেকে পরিবর্তিত হয় (30 304 প্রতিক্রিয়াটির প্রয়োজন নেই)। দীর্ঘমেয়াদী ক্যাচিংয়ের সঠিক ব্যবহার সম্পর্কে গুগলের আরও বিশদ রয়েছে ।


2
সুতরাং গতির দৃষ্টিকোণ থেকে আরও ভাল কী হতে পারে ... "200 (ক্যাশে)" বা "304" HTTP স্থিতি বার্তা?
হাঙ্ক

22
200 ক্যাশে। এই সম্পর্কে কিছু ভাল নোট এখানে: বিকাশকারী.ইয়াহু . com / পারফরম্যান্স /rules.html#expires । আপনি আপনার সম্পদে যতক্ষণ সম্ভব মেয়াদোত্তীর্ণ সময় চান, তবে আপনি এইভাবে একটি নির্দিষ্ট পরিমাণ নিয়ন্ত্রণ হারাতে পারেন তার সাথে এটি ভারসাম্য বজায় রাখতে হবে। আপনি যা করতে পারেন তা হ'ল ফাইলগুলিতে দীর্ঘস্থায়ী মেয়াদ নির্ধারণ করা এবং তারপরে যখন এই ফাইলগুলির জন্য একটি সম্পদ সংস্করণ নম্বর বাড়ানো দরকার হয়। উদাহরণস্বরূপ আপনি যখন পরিবর্তন হয় তখন আপনি শৈলী। CSS? V1 এবং <লিঙ্ক> উপাদানটিতে স্টাইল। CSS? ভি 2 তে বর্ধিতকরণ অন্তর্ভুক্ত করতে পারেন।
বেন রেজেনস্পান

1
ন্যায়বিচার, সুতরাং কেন ফায়ারব্যাগ রিপোর্ট করেছে যে ga.js এর জন্য স্থানীয় ক্যাশে (স্ট্যাটাস = 200 ক্যাশে) থেকে টানছে যখন সংযুক্ত.মিন.জেএস 304 টিএসপি স্থিতির প্রতিবেদন করছে। আশ্চর্যের বিষয় হ'ল উভয় ফাইল একই ফাইল টাইপের (জাভাস্ক্রিপ্ট) এবং একই সার্ভার ডিরেক্টরিতে থাকে। আপনি ভাববেন যে উভয়ই 200 বা 304 হবে, এবং আলাদা নয়
হ্যাঙ্ক

8
max-ageএবং ageমিলিত এছাড়া 200 (ক্যাশ) ফলাফল হতে পারে যদি হেডার ageচেয়ে কম হয় max-age। একটি ব্যতিক্রম হ'ল ব্যবহারকারী যখন ব্রাউজারের রিফ্রেশ বোতামটি ক্লিক করেন, সেই ক্ষেত্রে 304 শিরোনাম প্রেরণ করা হয়।
ইয়িটওয়াইল

2
HTML5 এর boilerplate ক্যাশে-কীট ধ্বংস দিবসে এর কোয়েরি স্ট্রিং পদ্ধতি ব্যবহার করে বিরুদ্ধে বিশেষ পরামর্শ দেওয়া হচ্ছে - এটি পরিবর্তন করতে ভালো href, url,এবং srcপ্রতিটি ফাইল উল্লেখ একটি 'ফিঙ্গারপ্রিন্ট' (হয় ফাইলের একটি হ্যাশ অথবা একটি সহজ বৃদ্ধি নম্বর) অন্তর্ভুক্ত করুন, এবং তারপর সার্ভার বলতে সেই ফিঙ্গারপ্রিন্টটি কেটে ফেলার জন্য এবং কেবল পরিবেশন করা style.cssবা যা কিছু হোক। আপনি যদি সার্ভারে এটি না করতে পারেন তবে আপনার বিল্ড সিস্টেমে ফিঙ্গারপ্রিন্ট দিয়ে আসল ফাইলগুলির নাম পরিবর্তন করুন।
আয়নো

62

200 (ক্যাশে) এর অর্থ ফায়ারফক্স কেবল স্থানীয়ভাবে ক্যাশেড সংস্করণ ব্যবহার করছে। এটি সবচেয়ে দ্রুত কারণ ওয়েব সার্ভারে কোনও অনুরোধ করা হয়নি।

304 এর অর্থ ফায়ারফক্স ওয়েব সার্ভারে "যদি-সংশোধিত-পরে" শর্তাধীন অনুরোধ প্রেরণ করছে। যদি ব্রাউজারটি প্রেরণের তারিখ থেকে ফাইলটি আপডেট না করা থাকে তবে ওয়েব সার্ভার একটি 304 প্রতিক্রিয়া ফিরিয়ে দেয় যা ফায়ারফক্সকে তার ক্যাশেড সংস্করণটি অবশ্যই ব্যবহার করতে বলে। এটি 200 (ক্যাশে) হিসাবে তত দ্রুত নয় কারণ অনুরোধটি এখনও ওয়েব সার্ভারে প্রেরণ করা হয়েছে, তবে সার্ভারটিকে ফাইলের বিষয়বস্তু প্রেরণ করতে হবে না।

আপনার শেষ প্রশ্নে আমি জানি না কেন একই ডিরেক্টরিতে দুটি জাভাস্ক্রিপ্ট ফাইল আলাদা ফলাফল দেখাচ্ছে returning


18

এটি আমাকে দীর্ঘ সময়ের জন্য ছুঁড়ে ফেলেছে। প্রথম যে বিষয়টি আমি যাচাই করেছি তা হ'ল আপনি রিফ্রেশ বোতামটি ক্লিক করে পৃষ্ঠাটি পুনরায় লোড করছেন না, এটি সর্বদা সংস্থানগুলির জন্য শর্তাধীন অনুরোধ জারি করবে এবং পৃষ্ঠার বেশিরভাগ উপাদানগুলির জন্য 304 গুলি ফিরে আসবে। পরিবর্তে ইউআরএল বারে যান পৃষ্ঠাটি নির্বাচন করুন এবং এন্টার টিপুন যেন আপনি ঠিক একই ইউআরএলটিতে আবার টাইপ করেছেন, এটি আপনাকে কীভাবে সঠিকভাবে ক্যাশে হচ্ছে তার একটি আরও ভাল সূচক দেবে। এই নিবন্ধটি রিফ্রেশ বোতামটি তাদের প্রভাবিত একটি মহান পেশা শর্তাধীন ও নিঃশর্ত অনুরোধ এবং কিভাবে মধ্যে পার্থক্য ব্যাখ্যা করে: http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about- শর্তসাপেক্ষ-HTTP-রিকোয়েস্টের-এবং--রিফ্রেশ-button.aspx


1
সিডিএন-এর কাছে অনুরোধের 304 স্থিতি বের করার চেষ্টা করতে আমি কতটা সময় ব্যয় করেছি তাও বর্ণনা করতে পারি না। আপনি কিছুটা আলাদা প্রশ্নের উত্তর
দিলেও

আপনি ঠিক বলেছেন: কোডগুলির মধ্যে পার্থক্য এই সত্যের সাথে সম্পর্কিত যে আপনি একই পৃষ্ঠাটি পুনরায় লোড করছেন বা না। যদি আমি কোনও পৃষ্ঠা পুনরায় লোড করি তবে আমি ব্রাউজারের নেটওয়ার্কে একটি 304 কোড মনিটরে দেখতে পাচ্ছি। তবে, যদি আমি অন্য URL টি অ্যাক্সেস করে যা এই একই ফাইলগুলি ব্যবহার করে, আমি ব্রাউজারের নেটওয়ার্কে 200 (ক্যাশে থেকে) কোড মনিটরিং করে দেখি my আমার ক্ষেত্রে, অন্য URL টি মূল URL- এ যুক্ত হওয়া কেবল একটি ক্যোয়ারী স্ট্রিং ছিল (পৃষ্ঠাটি ছিল মূলত একই)।
aldemarcalazans

8

HTTP 304 "সংশোধিত নয়"। আপনার ওয়েব সার্ভারটি মূলত ব্রাউজারকে বলছে "আপনি যখন অনুরোধ করেছিলেন শেষ বারের পরে এই ফাইলটি পরিবর্তন হয়নি" " যেখানে কোনও এইচটিটিপি 200 ব্রাউজারটিকে "এখানে একটি সফল প্রতিক্রিয়া" বলছে - যা আপনার ব্রাউজারটি প্রথমবার যখন ফাইলটিতে অ্যাক্সেস করছে বা প্রথমবার কোনও সংশোধিত অনুলিপি অ্যাক্সেস করা হচ্ছে তখন ফিরে আসা উচিত।

স্থিতি কোড সম্পর্কিত আরও তথ্যের জন্য http://en.wikedia.org/wiki/List_of_HTTP_status_codes দেখুন


এটাই আমার বোধগম্যতা ... এই কারণেই আমি আমার মূল পোস্টে বলেছি যে আমি আমার পৃষ্ঠাটি একাধিকবার রিফ্রেশ করেছি এবং একই ফেভিকন.আইকো এবং "বিশেষত জাভাস্ক্রিপ্ট" এর জন্য আমি "২০০ (ক্যাশে)" পাচ্ছি। খুব আশ্চর্যজনক
হ্যাঙ্ক

2
200 আসলে ক্যাশ মানে না, এর অর্থ ঠিক আছে। সম্ভাবনাগুলি হ'ল আপনার সার্ভার কনফিগারেশনটি স্পষ্টভাবে আপনার আইকো এবং জেএস ফাইলগুলিকে ক্যাশে করতে ব্রাউজারটিকে না বলে, যা এটি 200 এর একটি স্থিতি কোডটি ফিরিয়ে
আনবে

এটি আমার জাভাস্ক্রিপ্টের কিছু ক্ষেত্রে খ / সি নয়, আমি একটি 304 এবং অন্যান্য জাভাস্ক্রিপ্ট পেয়েছি "200 (ক্যাশে)"। সমস্ত জাভাস্ক্রিপ্ট একই ওয়েব সার্ভার ডিরেক্টরি উদাহরণের মধ্যে থাকে
হ্যাঙ্ক

আমার যোগ করা উচিত 200 (ক্যাশে) এর অর্থ হ'ল এটি স্থানীয়ভাবে ক্যাশে হয়েছে এবং প্রকৃতপক্ষে সার্ভারে একটি অনুরোধ করাচ্ছে না, যা সার্ভারে গিয়ে 304 টি প্রতিক্রিয়া পাওয়ার চেয়ে দ্রুত গতিতে চলেছে।
সমৃদ্ধ দেশ

আমার লাইভ সাইট এবং প্রশ্নে জাভাস্ক্রিপ্ট দেখাতে আমি আমার মূল পোস্টটি আপডেট করেছি। দয়া করে আমার আপডেট হওয়া মূল পোস্টটি দেখুন।
হাঙ্ক

2

আপনার শেষ প্রশ্নের জন্য, কেন? আমি যা জানি তার সাথে ব্যাখ্যা করার চেষ্টা করব

সাধারণ লোকের পদগুলিতে এই তিনটি স্থিতির কোডের একটি সংক্ষিপ্ত বিবরণ।

  • 200 - সাফল্য (ব্রাউজারের অনুরোধ এবং সার্ভার থেকে ফাইল পান)

সার্ভারে ক্যাচিং সক্ষম করা থাকলে

  • 200 (মেমরি ক্যাশে থেকে) - ব্রাউজারে ফাইল পাওয়া যায়, তাই ব্রাউজারটি সার্ভারের কাছে অনুরোধ চায় না
  • 304 - ব্রাউজার কোনও ফাইলের জন্য অনুরোধ করে তবে এটি সার্ভার দ্বারা প্রত্যাখ্যাত হয়

কিছু ফাইলের জন্য ব্রাউজার সার্ভার থেকে অনুরোধ করার সিদ্ধান্ত নিচ্ছে এবং কারও কাছে এটি স্টোরেজ (ক্যাশেড) ফাইলগুলি থেকে পড়ার সিদ্ধান্ত নিচ্ছে। কেন ? প্রতিটি ফাইলের একটি মেয়াদ শেষ হয়, তাই

যদি কোনও ফাইলের মেয়াদ শেষ না হয় তবে ব্রাউজারটি ক্যাশে (200 ক্যাশে) ব্যবহার করবে।

যদি ফাইলটির মেয়াদ শেষ হয়ে যায়, ব্রাউজার কোনও ফাইলের জন্য সার্ভারের জন্য অনুরোধ করে। উভয় জায়গায় সার্ভার চেক ফাইল (ব্রাউজার এবং সার্ভার)। যদি একই ফাইল পাওয়া যায় তবে সার্ভার অনুরোধটি প্রত্যাখ্যান করে। প্রোটোকল অনুসারে ব্রাউজার বিদ্যমান ফাইল ব্যবহার করে।

এই nginx কনফিগারেশন তাকান

location / {
    add_header Cache-Control must-revalidate;
    expires     60;
    etag on;

    ...
}

এখানে মেয়াদোত্তীর্ণটি 60 সেকেন্ডে সেট করা আছে, সুতরাং সমস্ত স্থিতিশীল ফাইলগুলি 60 সেকেন্ডের জন্য ক্যাশে থাকে। সুতরাং আপনি 60 সেকেন্ডের মধ্যে যদি আবার কোনও ফাইলের জন্য অনুরোধ করেন তবে ব্রাউজারটি মেমরি থেকে পড়বে (200 মেমরি)। 60 সেকেন্ডের পরে যদি আপনি অনুরোধ করেন তবে ব্রাউজার সার্ভারের জন্য অনুরোধ করবে (304)।

আমি ধরে নিয়েছি যে ফাইলটি 60 সেকেন্ডের পরে পরিবর্তন করা হয়নি, সেই ক্ষেত্রে আপনি 200 পাবেন (যেমন, সার্ভার থেকে আপডেট হওয়া ফাইলটি নেওয়া হবে)।

সুতরাং, যদি সার্ভারগুলি বিভিন্ন মেয়াদোত্তীর্ণ এবং ক্যাশে শিরোনাম (নীতিগুলি) দিয়ে কনফিগার করা থাকে তবে স্ট্যাটাসটি পৃথক হতে পারে।

আপনার ক্ষেত্রে আপনি সিডিএন ব্যবহার করছেন, সিডনির মূল উদ্দেশ্যটি উচ্চ প্রাপ্যতা এবং দ্রুত বিতরণ। সুতরাং তারা একাধিক সার্ভার ব্যবহার করে। যদিও ফাইলগুলি একই ডিরেক্টরিতে রয়েছে বলে মনে হয়, সিডিএন আপনার সামগ্রীর সরবরাহ করতে একাধিক সার্ভার ব্যবহার করতে পারে, যদি সেই সার্ভারগুলির আলাদা আলাদা কনফিগারেশন থাকে। তাহলে এই স্ট্যাটাস পরিবর্তন হতে পারে। আশা করি এটা সাহায্য করবে.


304 - সংশোধিত নয় সার্ভারের দ্বারা "প্রত্যাখ্যান" নয়। এটি সার্ভারটি ক্লায়েন্টকে "আপনি যে সংস্করণটির জন্য জিজ্ঞাসা করছেন তার জন্য ঘোষণা করছে, আমি জানি এটি সংশোধিত নয়, আপনার আসলে ফাইলটির দরকার নেই"। প্রযুক্তিগতভাবে, 304 "পুনর্নির্দেশ" প্রতিক্রিয়া কোডগুলির মধ্যে একটি। এটি ক্লায়েন্টকে বলছে "এটি নিজের ক্যাশে থেকে পান"।
বব কুহার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.