यदि संशोधित-के बाद से और अगर-कोई-मैच के बीच क्या अंतर हो सकता है? मुझे लगता है कि अगर कोई नहीं-मैच फ़ाइलों के लिए उपयोग किया जाता है, जबकि अगर संशोधित-के बाद से पृष्ठों के लिए उपयोग किया जाता है?
जवाबों:
Last-Modified/If-Modified-Since
और के बीच के अंतर के बारे में ETag/If-None-Match
:
दोनों का परस्पर उपयोग किया जा सकता है। हालाँकि, संसाधन के प्रकार पर निर्भर करता है, और यह सर्वर पर कैसे उत्पन्न होता है, एक या दूसरे प्रश्न ("क्या यह तब से संशोधित किया गया है ...?" / "क्या यह अभी भी इस ETag से मेल खाता है?") इसका उत्तर देना आसान हो सकता है ।
उदाहरण:
mtime
रूप में उपयोग करना Last-Modified
सबसे सरल उपाय है।ETag
करना बहुत आसान होगा। विषय पर अधिक जानकारी के लिए ये लिंक देखें:
If-Modified-Since
की तुलना में है, Last-Modified
जबकि If-None-Match
की तुलना में है ETag
। दोनों Modified-Since
और ETag
एक संसाधन के एक विशिष्ट प्रकार की पहचान करने के लिए इस्तेमाल किया जा सकता है।
लेकिन आपको यह जानकारी If-Modified-Since
देने की तुलना Last-Modified
करना कि कैश्ड वैरिएंट पुराना है या नया है जबकि सिर्फ तुलना If-None-Match
करने ETag
से आपको यह जानकारी मिल जाती है कि दोनों समान हैं या नहीं। इसके अलावा अधिकांश ETag
जेनरेटर में सिस्टम विशिष्ट इनकोड की जानकारी शामिल होती है इसलिए किसी फ़ाइल को किसी भिन्न ड्राइव पर ले जाने के साथ-साथ उसमें बदलाव भी हो सकता है ETag
।
अंतिम-संशोधित / यदि-संशोधित-चूंकि सीमित समय में उपयोग किया जाने वाला टाइमस्टैम्प मान है - एक सेकंड और वह केवल तेजी से बदलती सामग्री के लिए पर्याप्त नहीं है, उदाहरण के लिए, वेब-चैट एप्लिकेशन जहां किसी भी दूसरे पर एक से अधिक संदेश पोस्ट किए जा सकते हैं । ETag / if-none-Match उस समस्या को हल करने में मदद कर सकता है।
जैसा कि यह Google की सर्वोत्तम प्रथाओं में बताया गया है:
सभी कैच करने योग्य संसाधनों के लिए, समाप्ति या कैश-नियंत्रण की अधिकतम आयु और अंतिम-संशोधित या ETag में से एक को निर्दिष्ट करना महत्वपूर्ण है। यह समाप्ति और कैश-नियंत्रण दोनों को निर्दिष्ट करने के लिए अनावश्यक है: अधिकतम-आयु, या अंतिम-संशोधित और ETag दोनों को निर्दिष्ट करने के लिए।
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
के साथ ETag
(या UserAgent तरफ,, If-Modified-Since
साथ If-None-Match
) उल्लेख किया है। इसी तरह W3 कल्पना आपको प्रतिबंधित नहीं करती है। यह उपयोग करने के लिए नहीं कहते हैं If-Modified-Since
के साथ If-Match
है, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि दस्तावेजों के रूप में ETag द्वारा परिभाषित किया गया है कि दिनांक, लेकिन एक ही सामग्री को अद्यतन किया है के सेट काफी छोटा होना चाहिए।
अगर-संशोधित-चूंकि किसी तिथि का उपयोग करता है, जबकि यदि-कोई नहीं-मैच एक ETag का उपयोग करता है । वे दोनों "पृष्ठ" (यानी HTML) और अन्य फ़ाइलों के लिए उपयोग किए जा सकते हैं।
जब तक सर्वर द्वारा कमजोर नहीं कहा जाता है, तब तक एक ETag को एक मजबूत सत्यापनकर्ता माना जाता है, और इस प्रकार इसका उपयोग सशर्त रंगीन अनुरोध को पूरा करने के लिए किया जा सकता है। हालाँकि, स्वचालित रूप से उत्पन्न ETags सर्वर फ़ार्म स्थितियों में कठिनाइयों का प्रदर्शन करते हैं, क्योंकि वे अक्सर इनकोड जानकारी और / या एक अद्वितीय लगातार काउंटर का उपयोग करते हैं। व्यवहार में, मैंने लास्ट मोडिफाइड हेडर को काफी स्टैटिक कंटेंट के लिए पर्याप्त पाया है, जैसे कि प्रोटेक्टेड स्टैटिक कंटेंट परोसना, क्योंकि फाइल का राइट टाइम काफी हद तक वैलिडेटर बनाता है।
ETag अब तक का सबसे लचीला है। अनुरूप ग्राहकों को सशर्त अनुरोध में ETag भेजने की आवश्यकता होती है, जबकि वे उपलब्ध होने पर दोनों भेजते हैं।
इफ़-मॉडिफ़ाइड-चूंकि हेडर का उपयोग उस समय को निर्दिष्ट करने के लिए किया जाता है जिस पर ब्राउज़र ने पिछली बार अनुरोधित संसाधन प्राप्त किया था। If-none-Match हैडर का उपयोग उस इकाई टैग को निर्दिष्ट करने के लिए किया जाता है जिसे सर्वर ने अनुरोधित संसाधन के साथ जारी किया था जब इसे अंतिम बार प्राप्त किया गया था।
वर्णित दो तरीकों में, इन हेडरों का उपयोग ब्राउज़र के भीतर सामग्री के कैशिंग का समर्थन करने के लिए किया जाता है, और वे सर्वर को संसाधन की पूरी सामग्री के साथ प्रतिक्रिया करने के बजाय संसाधन की कैश्ड कॉपी का उपयोग करने के लिए निर्देश देने में सक्षम करते हैं यदि यह है आवश्यक नहीं।