ইটাগ বনাম শিরোনামের মেয়াদ শেষ হবে


359

আমি চারপাশে দেখেছি তবে আমি কোনও ইটাগ এবং একটি মেয়াদ উত্তীর্ণ শিরোনাম বা এক বা অন্য দুটি ব্যবহার করা উচিত কিনা তা বুঝতে পেরেছি না ।

আমি যা করার চেষ্টা করছি তা নিশ্চিত করা হচ্ছে যে আমার ফ্ল্যাশ ফাইলগুলি (এবং অন্যান্য চিত্রগুলি এবং সেই ফাইলগুলিতে কোনও পরিবর্তন হলে কেবল কী আপডেট হবে না)।

ফাইলের নাম পরিবর্তন করা বা এটির ক্যাশে না হওয়ার জন্য url এর শেষে কিছু অদ্ভুত অক্ষর রাখার মতো আমি বিশেষ কিছু করতে চাই না।

এছাড়াও, আমার পিএইচপি স্ক্রিপ্টগুলিতে এটি সমর্থন করার জন্য আমার শেষের দিকে অগ্রগতিমূলক কিছু করার দরকার আছে বা এটি সমস্ত অ্যাপাচি?


উত্তর:


677

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

মেয়াদোত্তীর্ণ শিরোনাম ক্লায়েন্ট (এবং প্রক্সি / ক্যাশে) দ্বারা এটি এমনকি সার্ভারের কাছে কোনও অনুরোধ করা প্রয়োজন কিনা তা নির্ধারণ করতে ব্যবহৃত হয়। আপনি মেয়াদোত্তীর্ণের তারিখের কাছাকাছি, ক্লায়েন্টের (বা প্রক্সি) তত বেশি সার্ভার থেকে এই ফাইলটির জন্য এইচটিটিপি অনুরোধ করবে।

সুতরাং আপনি যা করতে চান তা হল উভয় শিরোলেখ ব্যবহার করুন - মেয়াদ কতবার পরিবর্তিত হবে তার ভিত্তিতে মেয়াদ উত্তীর্ণের শিরোনামকে একটি যুক্তিসঙ্গত মান হিসাবে সেট করুন। তারপরে প্রেরিত ইটাগগুলি কনফিগার করুন যাতে ক্লায়েন্টরা যখন সার্ভারে একটি অনুরোধ প্রেরণ করে তখন ফাইলটি ফেরত পাঠাতে হবে কি না তা আরও সহজেই নির্ধারণ করতে পারে।

ইটাগ সম্পর্কে একটি সর্বশেষ নোট - যদি আপনি অ্যাপাচি চালিত একাধিক মেশিনের সাথে লোড-ভারসাম্য সার্ভার সেটআপ ব্যবহার করে থাকেন তবে আপনি সম্ভবত ইটাগ জেনারেশন বন্ধ করতে চাইবেন। এর কারণ ইনোডগুলি ইটাগ হ্যাশ অ্যালগরিদমের অংশ হিসাবে ব্যবহৃত হয় যা সার্ভারগুলির মধ্যে পৃথক হবে। গণনার অংশ হিসাবে আইওডগুলি ব্যবহার না করার জন্য আপনি অ্যাপাচি কনফিগার করতে পারেন তবে তারপরে আপনি নিশ্চিত করতে চান যে সমস্ত সার্ভারের জন্য একই ইটাগ উৎপন্ন হয়েছে তা নিশ্চিত করার জন্য ফাইলগুলির টাইমস্ট্যাম্পগুলি ঠিক একই রকম।


12
আপনার মেয়াদ শেষ হওয়ার পরিবর্তে ক্যাশে-নিয়ন্ত্রণ ব্যবহার করা উচিত কিনা তাও আপনার পরীক্ষা করা উচিত। আমার উপলব্ধি হ'ল ক্যাশে-নিয়ন্ত্রণের মেয়াদ শেষ হওয়ার পরে চালু হয়েছিল এবং আপনাকে আরও নিয়ন্ত্রণ দেয়। স্ট্যাকওভারফ্লো.com
লুইস পেরেজ

6
মেয়াদোত্তীর্ণ শিরোনামটি ব্যবহার করার সময় যখনই কোনও সংস্থান পরিবর্তন হয় ফাইলের নাম পরিবর্তন করা ভাল অনুশীলন, কারণ ক্লায়েন্টটি বাসার আগে ফাইলটি আবার অনুরোধ করবে না। বিশেষত যদি আপনি ভবিষ্যতের মানগুলি মেয়াদ শেষ হওয়ার সাথে সাথে ব্যবহার করেন।
schnatterer

8
আসুন আমরা উভয় ব্যবহার করব বলুন। মেয়াদোত্তীর্ণের সময়সীমা শেষ হয়ে গেলে কী ঘটবে, কিন্তু ফাইলটি পরিবর্তন করা হয়নি (ইটাগটি একই?) সার্ভার 304 ফিরে আসবে এবং ফাইলটি ব্রাউজার ক্যাশে থেকে পরিবেশন করা হবে। আমার প্রশ্ন হ'ল, এই মুহুর্তে মেয়াদ শেষ হওয়ার সময়টি পুনরায় জেনারেট করা হবে?
user345602

2
সতর্কতা অবলম্বন করুন ETAG এবং শিরোনামটি একটি শূন্য-মান থেকে সমাপ্ত হবে। এটি বর্ণের পরিস্থিতি তৈরি করতে পারে। Jakearchibald.com/2016/casing-best- অনুশীলন
ওয়েস্টন

2
সার্ভারগুলিকে আদৌ ইনোড বা টাইমস্ট্যাম্প ব্যবহার না করার কথা বলা সম্ভব? এছাড়াও, কেন কেবল ইটিগগুলির জন্য এটি প্রয়োজনীয় বিষয়বস্তু ব্যবহার করতে ব্যবহৃত হয়?
সেজা

108

Etag এবং শেষ বার পরিমার্জিত হেডার হয় ভ্যালিডেটর

তারা ব্রাউজার এবং / অথবা ক্যাশে (বিপরীত প্রক্সি) বুঝতে কোনও ফাইল / পৃষ্ঠা, পরিবর্তিত হয়েছে কিনা, একই নামটি সংরক্ষণ করে তা বুঝতে সহায়তা করে।

মেয়াদ উত্তীর্ণ এবং ক্যাশে-নিয়ন্ত্রণ রিফ্রেশ তথ্য দিচ্ছে ।

এর অর্থ হল যে তারা জানায়, ব্রাউজার এবং প্রক্সিগুলির মধ্যে বিপরীতমুখীতা, কতক্ষণ বা কতক্ষণ পর্যন্ত তারা পৃষ্ঠা / ফাইলটিকে তাদের ক্যাশে রাখে।

সুতরাং প্রশ্নটি সাধারণত কোনটি ব্যবহারকারীর ব্যবহার করতে হবে, এটিটিগ বা সর্বশেষ-সংশোধিত এবং কোনটি ব্যবহারের জন্য পুনরায় রিফ্রেশ করে তথ্য, শিরোনাম বা ক্যাশে-নিয়ন্ত্রণ নিয়ন্ত্রণ করে।


30

Expiresএবং Cache-Control"শক্তিশালী ক্যাচিং শিরোলেখ"

Last-Modifiedএবং ETag"দুর্বল ক্যাচিং শিরোলেখ"

প্রথমে ব্রাউজারটি Expires/Cache-Controlসার্ভারে একটি অনুরোধ করবেন কিনা তা নির্ধারণ করতে চেক করুন

যদি কোনও অনুরোধ করতে Last-Modified/ETagহয় তবে এটি HTTP অনুরোধটি প্রেরণ করবে । যদি Etagদস্তাবেজের মান এর সাথে মেলে তবে সার্ভার 200 এর পরিবর্তে 304 কোড প্রেরণ করবে এবং কোনও সামগ্রী নেই। ব্রাউজারটি এর ক্যাশে থেকে সামগ্রীগুলি লোড করবে।


1
আপনি কি কোনও দলিল "শক্তিশালী এবং দুর্বল" ক্যাচিং আচরণকে সমর্থন করেন? আমি একটি খুঁজে পাইনি এবং আমার ক্লায়েন্ট ব্রাউজারটি এখন সর্বশেষ-পরিবর্তিত ওভারটির প্রকৃত মেয়াদোত্তীর্ণ হওয়ার পরিবর্তে অগ্রাধিকার দেয় যা আমি কেন বুঝতে পারি না।
GMsoF

1
: আপনি এই কটাক্ষপাত করতে পারেন @GMsoF tools.ietf.org/html/rfc7232#section-2.1
Medeiros

সুতরাং, যদি আমি নিশ্চিত করতে চাই যে আমার পরিবর্তনগুলি ক্লায়েন্টে তাত্ক্ষণিকভাবে প্রচারিত হয়েছে, তবে এখনও কিছু ক্যাশিংয়ের পক্ষে উপকৃত হয় তবে আমি কেবলমাত্র সর্বশেষ-পরিবর্তিত এবং ইটাগ ব্যবহার করতে পারি?
সেবাস্তিয়ান লরবার

18

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

আপনারও সম্ভবত অ্যাপাচি ভবিষ্যতে এক বছর সময়সীমার শিরোনাম প্রেরণ করা উচিত ( http://www.w3.org/Potocols/rfc2616/rfc2616-sec14.html#sec14.21 অনুসারে ) যাতে ব্রাউজারগুলি জানতে পারে যে সামগ্রীটি রয়েছে ক্যাশেবেল। এটি কনফিগার করতে Mod_expires দেখুন ।


সুতরাং ইটাগের সর্বশেষ পরিবর্তন হবে এবং মেয়াদোত্তীর্ণ শিরোনামটি এটি বলবে আমি এটি এটি ক্যাশে করতে চাই এবং যখন আমি আমার ফাইল আপলোড এবং ওভাররাইট করি তখন এটি আবার ব্যবহারকারীর ক্যাশে টেনে নামানো হবে অন্যথায় 304 সঠিকভাবে উত্পন্ন হবে?
GeoffreyF67

ইটাগ একটি জটিল উপায়ে শেষ-পরিবর্তিত তারিখের উপর নির্ভর করে; আপনি যখন ফাইলটি পরিবর্তন করবেন তখন ইটাগ পরিবর্তন হবে। তারপরে ব্রাউজারের মাধ্যমে প্রেরিত এটাগ (ফাইলটির ক্যাশেড সংস্করণের জন্য) সার্ভারে থাকা ফাইলটির ইটাগের সাথে মেলে না এবং 304 টি প্রতিক্রিয়া না দিয়ে অ্যাপাচি ফাইলটি প্রেরণ করবে।
ডেভিড জেড

6
এক বছরের মেয়াদ শেষ হবে না কি ক্লায়েন্টকে এক বছরের জন্যও নতুন সংস্করণ পরীক্ষা করতে বলা হবে না?
জন বাচির

@ জন: হ্যাঁ, আমি অনুমান করি যে আমি স্থির বিষয়বস্তুর কথা ভেবেছিলাম যা কখনই লিখতাম না changes
ডেভিড জেড

2
@ জন বাচির: যে শৌখিন হয়ে উঠবে, কিন্তু ব্রাউজারটি যে কোনও উপায়ে সার্ভারকে কমপক্ষে একটি নতুন সংস্করণের অনুসন্ধানের জন্য আঘাত করবে বলে মনে হচ্ছে। : আমি এই সমস্যা সম্পর্কে আরেকটি প্রশ্ন খোলা stackoverflow.com/questions/10048740/...
মার্কো Demaio

13

আরেকটি সারাংশ:

আপনার দুটোই ব্যবহার করা দরকার। ইটাগগুলি একটি "সার্ভার সাইড" তথ্য। মেয়াদ শেষ হ'ল "ক্লায়েন্ট সাইড" ক্যাচিং।

  • আপনার যদি ভারসাম্যযুক্ত সার্ভার না থাকে তবে ইটাগগুলি ব্যবহার করুন । তারা নিরাপদ এবং ক্লায়েন্টদের জানাতে দেবে যে প্রতিবার আপনি যখন আপনার পক্ষ থেকে কিছু পরিবর্তন করেন তখন আপনার সার্ভার ফাইলগুলির নতুন সংস্করণ পাওয়া উচিত should

  • মেয়াদসীমা অবশ্যই সাবধানতার সাথে ব্যবহার করতে হবে, যেন আপনি ভবিষ্যতে কোনও মেয়াদোত্তীর্ণের তারিখ নির্ধারণ করেন তবে অবিলম্বে ফাইলগুলির মধ্যে একটির পরিবর্তন করতে চান (উদাহরণস্বরূপ একটি জেএস ফাইল), কিছু ব্যবহারকারী সম্ভবত দীর্ঘকাল অবধি পরিবর্তিত সংস্করণটি পাবেন না!


2
এই মেয়াদ উত্তীর্ণ হওয়া অবস্থার ক্ষেত্রে আপনার মূলত আপনার জেএসের নাম পরিবর্তন করতে হবে এবং এটি আপনার HTML এ পরিবর্তন করতে হবে এবং আশা করি আপনি এইচটিএমএল ফাইলের মেয়াদও 1 বছর সেট করেন নি।
এরালপবি

1

একটি অতিরিক্ত বিষয় আমি উল্লেখ করতে চাই যে উত্তরগুলির মধ্যে কিছু মিস হয়ে যেতে পারে তা হ'ল উভয়টি হ'ল ETagsএবং Expires/Cache-controlআপনার শিরোনামে।

আপনার প্রয়োজনের উপর নির্ভর করে এটি কেবল আপনার হেডারে অতিরিক্ত বাইট যুক্ত করতে পারে যা প্যাকেটগুলি বাড়িয়ে তুলতে পারে যার অর্থ আরও টিসিপি ওভারহেড। আবার আপনার দেখতে হবে আপনার হেডারে উভয় জিনিসই রাখার ওভারহেড প্রয়োজনীয় কিনা বা এটি কেবল আপনার অনুরোধগুলিতে অতিরিক্ত ওজন যুক্ত করবে যা কর্মক্ষমতা হ্রাস করে।

কাইল সিম্পসনের এই দুর্দান্ত ব্লগ পোস্টে আপনি এ সম্পর্কে আরও পড়তে পারেন: http://clala.perfplanet.com/2010/bloated-request-response-headers/


1

আমার দৃষ্টিতে, মেয়াদোত্তীর্ণ শিরোলেখ সহ সার্ভার ক্লায়েন্টকে বলতে পারে কখন আমার ডেটা বাসি হবে, যখন ইটাগের সাথে সার্ভার ক্লায়েন্টের প্রতিটি অনুরোধের জন্য ইটাগ মানটি পরীক্ষা করবে।


0

কোনও সংস্থান অনুলিপি ব্যবহার করতে হবে কিনা তা নির্ধারণ করতে ইটাগ ব্যবহার করা হয়। এবং ক্যাশে-নিয়ন্ত্রণের মতো শিরোনামের মেয়াদ শেষ হয়ে যায় ক্লায়েন্টকে বলা হয় যে ক্যাশে দশকের আগে ক্লায়েন্টকে স্থানীয় সংস্থানটি আনতে হবে।

আধুনিক সাইটগুলিতে প্রায়শই হ্যাশ নামে একটি ফাইল সরবরাহ করা হয় app.98a3cf23.js, যাতে মেয়াদ উত্তীর্ণ হয়ডার ব্যবহার করা ভাল অভ্যাস। এর পাশাপাশি এটি নেটওয়ার্কের ব্যয়ও হ্রাস করে।

আশা করি এটা সাহায্য করবে ;)

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