ক্যাশে-নিয়ন্ত্রণ কী: ব্যক্তিগত?


148

আমি যখন chesseng.herokuapp.com পরিদর্শন করি তখন আমি দেখতে একটি প্রতিক্রিয়া শিরোনাম পাই

Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/css
Date:Tue, 16 Oct 2012 06:37:53 GMT
Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT
Status:200 OK
transfer-encoding:chunked
Vary:Accept-Encoding
X-Rack-Cache:miss

এবং তারপরে আমি পৃষ্ঠাটি রিফ্রেশ করে পেয়েছি

Cache-Control:private
Connection:keep-alive
Date:Tue, 16 Oct 2012 06:20:49 GMT
Status:304 Not Modified
X-Rack-Cache:miss

সুতরাং মনে হচ্ছে ক্যাশে কাজ করছে। যদি এটি ক্যাশে কাজ করে তবে মেয়াদ কী এবং মেয়াদ উত্তীর্ণ হবে: সর্বোচ্চ বয়স । বিভ্রান্তি যুক্ত করতে, যখন আমি পৃষ্ঠাটি https://developers.google.com/speed/pagespeed/insights/ এ পরীক্ষা করি তখন এটি আমাকে "লিভারেজ ব্রাউজার ক্যাশে" করতে বলে।


এই চিত্রটি পরীক্ষা stackoverflow.com/a/49925190/3748498
pravdomil

উত্তর:


74

ক্যাশিং কেন কাজ করছে সে সম্পর্কে আপনার প্রশ্নের উত্তর দিতে, যদিও ওয়েব-সার্ভারে শিরোনাম অন্তর্ভুক্ত করা হয়নি:

  • মেয়াদ শেষ: [a date]
  • ক্যাশে-নিয়ন্ত্রণ: সর্বাধিক বয়স =[seconds]

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

  • ক্যাশে-নিয়ন্ত্রণ: ব্যক্তিগত

তবে সার্ভার কোনও ধরণের ক্যাশে করার ইঙ্গিতগুলি অন্তর্ভুক্ত করতে ভুলে গেছে:

  • তারা মেয়াদ শেষ করতে ভুলে গিয়েছিল , তাই ব্রাউজারটি সেই তারিখ পর্যন্ত ক্যাশেড অনুলিপিটি ব্যবহার করতে জানে knows
  • তারা সর্বোচ্চ-বয়স অন্তর্ভুক্ত করতে ভুলে গিয়েছিল , তাই ব্রাউজারটি জানে যে ক্যাশেড আইটেমটি কতক্ষণ ভাল
  • তারা ই-ট্যাগ অন্তর্ভুক্ত করতে ভুলে গেছে , তাই ব্রাউজারটি শর্তযুক্ত অনুরোধ করতে পারে

তবে তারা প্রতিক্রিয়াতে একটি সর্বশেষ-পরিবর্তিত তারিখ অন্তর্ভুক্ত করেছে:

Last-Modified: Tue, 16 Oct 2012 03:13:38 GMT

যেহেতু ব্রাউজারটি ফাইলটি পরিবর্তিত হওয়ার তারিখটি জানে তাই এটি শর্তযুক্ত অনুরোধ সম্পাদন করতে পারে । এটি সার্ভারকে ফাইলটির জন্য জিজ্ঞাসা করবে, তবে সার্ভারকে কেবলমাত্র ফাইলটি প্রেরণের নির্দেশ দিবে যদি এটি ২০১২/১০/১ 3 3:13:38 থেকে সংশোধিত হয়েছে:

GET / HTTP/1.1
If-Modified-Since: Tue, 16 Oct 2012 03:13:38 GMT

সার্ভারটি অনুরোধটি গ্রহণ করে, বুঝতে পারে যে ক্লায়েন্টটির ইতিমধ্যে অতি সাম্প্রতিকতম সংস্করণ রয়েছে। 200 OKপৃষ্ঠার বিষয়বস্তু অনুসরণ করে ক্লায়েন্টকে প্রেরণ করার পরিবর্তে এটি আপনাকে বলবে যে আপনার ক্যাশেড সংস্করণটি ভাল:

304 Not Modified

আপনার ব্রাউজারটিকে সার্ভারে একটি অনুরোধ প্রেরণে বিলম্ব ভোগ করতে হবে এবং প্রতিক্রিয়াটির জন্য অপেক্ষা করতে হবে, তবে এটি স্থির সামগ্রীটি পুনরায় ডাউনলোড করতে বাঁচাতে পারে না।

সর্বোচ্চ বয়স কেন ? কেন মেয়াদ শেষ ?

কারণ সর্বশেষ-পরিবর্তিত স্তন্যপান।

সার্ভারে সবকিছু না হয়েছে এর সাথে জড়িত একটি তারিখ। আমি যদি উড়তে একটি পৃষ্ঠা তৈরি করি তবে এর সাথে কোনও তারিখ যুক্ত নেই - এটি এখন । তবে আমি 15 সেকেন্ডের জন্য ব্যবহারকারীকে হোমপৃষ্ঠায় ক্যাশে দিতে পুরোপুরি ইচ্ছুক:

200 OK
Cache-Control: max-age=15

যদি ব্যবহারকারী হাতুড়ি দেয় তবে F5তারা 15 সেকেন্ডের জন্য ক্যাশেড সংস্করণ পাবে। যদি এটি কর্পোরেট প্রক্সি হয় তবে একই 15 সেকেন্ডের উইন্ডোতে একই পৃষ্ঠাতে সমস্ত 67198 ব্যবহারকারী হ'ল সমস্ত একই বিষয়বস্তু পাবেন - সমস্তই কাছের ক্যাশে থেকে পরিবেশন করা হয়েছে। পারফরম্যান্স সবার জন্য জয়।

যুক্ত করার গুণটি Cache-Control: max-ageহ'ল ব্রাউজারকে শর্তসাপেক্ষ অনুরোধও করতে হয় না ।

  • আপনি যদি কেবল নির্দিষ্ট করে থাকেন Last-Modifiedতবে ব্রাউজারকে একটি অনুরোধ সম্পাদন করতে হবে If-Modified-Sinceএবং 304 Not Modifiedপ্রতিক্রিয়ার জন্য দেখতে হবে
  • যদি আপনি নির্দিষ্ট করে থাকেন max-ageতবে ব্রাউজারটিকে এমনকি নেটওয়ার্কটি রাউন্ড-ট্রিপ ভোগ করতে হবে না; সামগ্রীগুলি ঠিক ক্যাশে থেকে বেরিয়ে আসবে

"ক্যাশে-নিয়ন্ত্রণ: সর্বাধিক বয়স" এবং "মেয়াদ শেষ" এর মধ্যে পার্থক্য

Expiresআধুনিক (সি। 1998) Cache-Control: max-ageশিরোনামের সমতুল্য একটি উত্তরাধিকার :

  • Expires: আপনি একটি তারিখ নির্দিষ্ট করেছেন (ইয়াক)
  • max-age: আপনি সেকেন্ড নির্দিষ্ট (ভালতা)
  • এবং যদি উভয়ই নির্দিষ্ট করা থাকে তবে ব্রাউজারটি ব্যবহার করে max-age:

    200 OK
    Cache-Control: max-age=60
    Expires: 20180403T192837 
    

1998 এর পরে লেখা যে কোনও ওয়েব সাইট Expiresআর ব্যবহার করা উচিত নয় এবং এর পরিবর্তে ব্যবহার করা উচিত max-age

ইটাগ কি?

ETag সর্বশেষ-পরিবর্তিত অনুরূপ , এটির তারিখ হতে হবে না - এটি কেবল কিছু হতে পারে

যদি আমি একটি ডাটাবেস থেকে পণ্যগুলির তালিকা টানছি, সার্ভার সর্বশেষ rowversionতারিখের পরিবর্তে একটি ইট্যাগ হিসাবে প্রেরণ করতে পারে :

200 OK
ETag: "247986"

আমার ইটাগ স্ট্যাটিক রিসোর্সের SHA1 হ্যাশ হতে পারে (যেমন চিত্র, জেএসএস, সিএসএস, ফন্ট), বা ক্যাশেড রেন্ডারযুক্ত পৃষ্ঠার (অর্থাত্ মোজিলা এমডিএন উইকি এটি করে; তারা চূড়ান্ত মার্কআপ হয়):

200 OK
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

এবং ঠিক সর্বশেষ-পরিবর্তিত উপর ভিত্তি করে শর্তাধীন অনুরোধের ক্ষেত্রে :

GET / HTTP/1.1
If-Modified-Since: Tue, 16 Oct 2012 03:13:38 GMT

304 Not Modified

আমি ইটাগের ভিত্তিতে শর্তসাপেক্ষ অনুরোধ সম্পাদন করতে পারি :

GET / HTTP/1.1
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

304 Not Modified

একটি ETagতার চেয়েও উচ্চতর Last-Modifiedকারণ এটি ফাইলগুলি ছাড়াও জিনিসগুলির জন্য কাজ করে বা তারিখের ধারণা রয়েছে এমন জিনিসগুলির জন্য । এটা ঠিক নয়


1
অসাধারণ! আমি এই উত্তরের জন্য একটি অনুগ্রহ রেখেছি। cache-controlনা থাকলে কী হয় ? এবং আপনি কেবল Etag আছে? সার্ভারের বিরুদ্ধে এখনও কি 'শর্তসাপেক্ষ অনুরোধ' করার দরকার নেই? আমি অফলাইনে থাকাকালীন যে আচরণটি দেখছি তা হ'ল এটি কেবল ক্যাশে থেকে ফিরে আসে। তবে এটি অফলাইনে থাকলে এটি শর্তযুক্ত অনুরোধ করতে পারে না। সুতরাং এর অর্থ কি যদি আপনি অফলাইনে থাকেন তবে তা অনির্দিষ্টকালের জন্য ক্যাশে হবে? আমি ইতিমধ্যে এখানে এই প্রশ্নটি বিস্তারিত জিজ্ঞাসা করেছি । আপনি কি একবার দেখে নিতে পারেন?
মধু

167
Cache-Control: private

ইঙ্গিত করে যে প্রতিক্রিয়া বার্তার সমস্ত বা অংশটি কোনও একক ব্যবহারকারীর উদ্দেশ্যে এবং একটি ভাগ করা ক্যাশে যেমন কোনও প্রক্সি সার্ভারের মাধ্যমে ক্যাশে হওয়া উচিত নয়।

আরএফসি 2616 বিভাগ থেকে 14.9.1


14
কারণ এটি আপনার ব্রাউজার দ্বারা ক্যাশে হয়েছিল। আপনি একক ব্যবহারকারী যা প্রতিক্রিয়াটির জন্য তৈরি হয়েছিল।
ড্যান ডি

13
না, কারণ এটি নয় যে Cache-Control:privateকেবল ভাগ করা ক্যাশে (যেমন প্রক্সি ক্যাশে) প্রতিক্রিয়াটি ক্যাশে করা উচিত নয়।
ড্যান ডি

5
@ ট্রেজকাজ না, এর অর্থ একটি একক ব্যবহারকারী। ব্যবহারকারী এমন এক অ্যাকাউন্ট যা তার নিজস্ব হোম ডিরেক্টরি রয়েছে যেখানে ক্যাশে থাকে res একই ব্যবহারকারীর মালিকানাধীন প্রোফাইলগুলি তাদের ক্যাশে ভাগ করতে পারে। যেমন আপনি পেয়েছেন। তবে একই কম্পিউটারে দুটি প্রোফাইল বিভিন্ন ব্যবহারকারীর মালিকানাধীন যদি তাদের ক্যাশে ভাগ করা ক্যাশে হিসাবে গণ্য না করা হয় তবে তাদের ক্যাশে ভাগ করা উচিত নয়।
ড্যান ডি

2
আহ, সুতরাং এটি ওএস-স্তরের-প্রতি ব্যবহারকারী হ্যাঁ, আমি যে কারণটি নিয়ে ভাবছি তা হ'ল ক্রোমের ছদ্মবেশী উইন্ডো এবং অ-ছদ্মবেশী উইন্ডোর মধ্যে একটি আপাত তথ্য ফাঁস, যা এটি করতে ক্যাশে ব্যবহার করে।
ট্রেজকাজ

2
@ ডিডিবাসের proxy-revalidateপ্রয়োজন হয় যে প্রতিটি অ্যাক্সেসে প্রক্সিগুলি সর্বদা পুনর্নির্মাণ করে। privateপ্রক্সি যেখানে ক্যাচিং থেকে বাধা দেয়।
ড্যান ডি

20

আরএফসি 2616, বিভাগ 14.9.1 :

ইঙ্গিত করে যে প্রতিক্রিয়া বার্তার সমস্ত বা অংশটি কোনও একক ব্যবহারকারীর উদ্দেশ্যে এবং একটি ভাগ করা ক্যাশে ক্যাশে হওয়া আবশ্যক নয় ... একটি ব্যক্তিগত (ভাগ না করা) ক্যাশে প্রতিক্রিয়াটিকে ক্যাশে করতে পারে।


ব্রাউজারগুলি এই তথ্য ব্যবহার করতে পারে। অবশ্যই, বর্তমান "ব্যবহারকারী" এর অর্থ অনেকগুলি হতে পারে: ওএস ব্যবহারকারী, একটি ব্রাউজার ব্যবহারকারী (যেমন ক্রোমের প্রোফাইল) ইত্যাদি specified এটি নির্দিষ্ট নেই।

আমার জন্য, আরো একটি কংক্রিট উদাহরণ কয়েক Cache-Control: privateপ্রক্সি সার্ভার (যা সাধারণত অনেক ব্যবহারকারী আছে) এটা ক্যাশে করা হবে না হয়। এটি শেষ ব্যবহারকারীর জন্য বোঝানো হয়েছে এবং অন্য কারও জন্য নয়।


এফওয়াইআই, আরএফসি স্পষ্ট করে দেয় যে এটি সুরক্ষা সরবরাহ করে না। এটি সঠিক বিষয়বস্তু প্রদর্শন সম্পর্কে, সামগ্রী সুরক্ষিত না করে।

ব্যক্তিগত শব্দটির এই ব্যবহারটি কেবল যেখানে প্রতিক্রিয়া ক্যাশে হতে পারে তা নিয়ন্ত্রণ করে এবং বার্তা সামগ্রীর গোপনীয়তা নিশ্চিত করতে পারে না।


5
একটি ব্যক্তিগত (ভাগ না করা) ক্যাশে হতে পারে প্রতিক্রিয়াটিকে ক্যাশে। এই অংশটি মূল। ধন্যবাদ।
অলিভার

0

মেয়াদ উত্তীর্ণ সত্তা-শিরোনাম ক্ষেত্রটি তারিখ / সময় দেয় যার পরে প্রতিক্রিয়াটিকে বাসি হিসাবে বিবেচনা করা হয় The ক্যাশে-নিয়ন্ত্রণ: সর্বাধিক ক্ষেত্রটি বয়সের মান (সেকেন্ডে) দেয় যা প্রতিক্রিয়ার বাসি বিবেচনা করা হয়।

উপরে শিরোনাম ক্ষেত্রের চ্যালেঞ্জটি ক্লায়েন্টকে সার্ভারে অনুরোধ প্রেরণ করবে কিনা তা সিদ্ধান্ত নিতে একটি ব্যবস্থা দেয়। কিছু শর্তে, ক্লায়েন্টটি বিচ্ছেদ করার জন্য একটি অনুরোধ পাঠান এবং প্রতিক্রিয়ার বয়স মূল্য বড় হয় তবে সর্বাধিক মান, ডোজ এর অর্থ সার্ভারের ক্লায়েন্টকে সংস্থান পাঠাতে হবে? সম্ভবত রিসোর্স কখনও পরিবর্তন হয় নি।

এই সমস্যাটি সমাধান করার জন্য, HTTP1.1 সর্বশেষ-সংশোধিত প্রধান দেয়। সার্ভার ক্লায়েন্টের প্রতিক্রিয়াটির সর্বশেষ পরিবর্তিত তারিখ দেয়। যখন ক্লায়েন্টকে এই সংস্থান দরকার হয়, এটি যদি সংশোধিত-যেহেতু প্রধান ক্ষেত্রটি সার্ভারে প্রেরণ করবে। যদি এই তারিখটি পুনঃসূচকের পরিবর্তিত তারিখের আগে হয় তবে সার্ভারটি সংস্থানটি ক্লায়েন্টকে প্রেরণ করবে এবং 200 কোড দেবে ther অন্যদিকে, এটি ক্লায়েন্টকে 304 কোড ফেরত দেবে এবং এর অর্থ ক্লায়েন্ট এটি সংস্থানিত সংস্থানটি ব্যবহার করতে পারে।

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