अगर संशोधित-के बाद से अगर-कोई नहीं-मैच


89

यदि संशोधित-के बाद से और अगर-कोई-मैच के बीच क्या अंतर हो सकता है? मुझे लगता है कि अगर कोई नहीं-मैच फ़ाइलों के लिए उपयोग किया जाता है, जबकि अगर संशोधित-के बाद से पृष्ठों के लिए उपयोग किया जाता है?

जवाबों:


112

Last-Modified/If-Modified-Sinceऔर के बीच के अंतर के बारे में ETag/If-None-Match:

दोनों का परस्पर उपयोग किया जा सकता है। हालाँकि, संसाधन के प्रकार पर निर्भर करता है, और यह सर्वर पर कैसे उत्पन्न होता है, एक या दूसरे प्रश्न ("क्या यह तब से संशोधित किया गया है ...?" / "क्या यह अभी भी इस ETag से मेल खाता है?") इसका उत्तर देना आसान हो सकता है ।

उदाहरण:

  • यदि आप फ़ाइलों की सेवा कर रहे हैं, तो फ़ाइल का तारीख के mtimeरूप में उपयोग करना Last-Modifiedसबसे सरल उपाय है।
  • यदि आप कई SQL प्रश्नों से निर्मित एक डायनामिक वेब पेज की सेवा कर रहे हैं, तो यह जाँचना कि क्या उन प्रश्नों में से किसी के द्वारा लौटाया गया डेटा अव्यवहारिक है (जब तक कि उन सभी में किसी प्रकार का "अंतिम संशोधित" कॉलम न हो)। इस मामले में, पृष्ठ सामग्री के एक md5 हैश की तरह उदाहरण का उपयोग ETagकरना बहुत आसान होगा।
    OTOH, इसका मतलब है कि आपको अभी भी सर्वर पर पूरा पेज जेनरेट करना होगा, यहाँ तक कि एक सशर्त GET के लिए भी। यह पता लगाना कि वास्तव में ETag (प्राथमिक कुंजियों, संशोधन संख्याओं, ... आदि) में जाने से आपको यहां बहुत समय बच सकता है।

विषय पर अधिक जानकारी के लिए ये लिंक देखें:


मैंने ब्राउज़र को ETag भेजा है, लेकिन यह कभी भी If-none-Match के साथ एक ही पृष्ठ का अनुरोध नहीं करता है। समस्या क्या हो सकती है?
पचेरियर

2
@ स्पेसर: ब्राउजरों को Etag का उपयोग करने की आवश्यकता नहीं होती है। तो यह एक पुराना ब्राउज़र हो सकता है और बस इसे अनदेखा कर सकता है। दूसरी संभावना यह है कि इकाई को यूआरएल मापदंडों के साथ एक्सेस किया जा रहा है जो कॉल से कॉल में बदलते हैं। यदि इकाई का नाम बदल जाता है तो etag अभ्यस्त विभिन्न अनुरोधों के लिए उपयोग किया जाता है।
राफेल बैप्टिस्टा

@RafaelBaptista टिप्पणी के अपने दूसरे छमाही में अधिक विस्तृत करने के लिए, कहो कि मेरे पास यह स्थिति है: मेरे पास एक फ़ाइल सर्वर है और सर्वर ETags का उपयोग करते हुए संस्करण का समर्थन करता है और पश्चगामी संगतता कारणों के लिए, हम ग्राहकों के लिए एक क्वेरी पैरामीटर का उपयोग करते हैं \ _current_version = (संस्करण) )। अगर मैं my_current_version के लिए अलग-अलग मानों के साथ HTTP अनुरोध भेजता हूं, लेकिन ETags के साथ भी, तो सबसे अच्छा अभ्यास के रूप में क्या मानदंड को प्राथमिकता दी जाएगी, यह निर्धारित करते समय कि क्या एक नया संस्करण प्रदान करना है या 304 वापस भेजना है? धन्यवाद!
हंसते

1
कैसे सर्वर का उपयोग करता है Etag सर्वर तक है। यदि आप पुनर्लेखन नियमों के माध्यम से चाहते हैं, तो आप etag के मापदंडों को अनदेखा करने के लिए अधिकतर फ़ाइल सर्वर को कॉन्फ़िगर कर सकते हैं। आपके पास क्लाइंट - ब्राउज़र पर कम नियंत्रण है। अधिकांश ईटैग हेडर नहीं भेजेंगे जो उन्हें दूसरे के लिए एक अनुरोध में मापदंडों के एक सेट के लिए मिला। छवि के लिए एक ग्राहक अनुरोध? V = 1 छवि के लिए एक ही etag नहीं भेजा जाएगा? V = 2। अगर मैं अपने खुद के सर्वर लिख रहा था, तो मैं छवि सामग्री के हैश के रूप में etag को लागू करूंगा। कोई भी यूआरएल जो एक संसाधन के लिए पूछता है, और एक एटा के साथ आता है जो उस छवि के हैश से मेल खाता है, जिसे मैं भेजूँगा, मैं 304 लौटाता हूँ।
राफेल बैप्टिस्टा

22

If-Modified-Sinceकी तुलना में है, Last-Modifiedजबकि If-None-Matchकी तुलना में है ETag। दोनों Modified-Sinceऔर ETagएक संसाधन के एक विशिष्ट प्रकार की पहचान करने के लिए इस्तेमाल किया जा सकता है।

लेकिन आपको यह जानकारी If-Modified-Sinceदेने की तुलना Last-Modifiedकरना कि कैश्ड वैरिएंट पुराना है या नया है जबकि सिर्फ तुलना If-None-Matchकरने ETagसे आपको यह जानकारी मिल जाती है कि दोनों समान हैं या नहीं। इसके अलावा अधिकांश ETagजेनरेटर में सिस्टम विशिष्ट इनकोड की जानकारी शामिल होती है इसलिए किसी फ़ाइल को किसी भिन्न ड्राइव पर ले जाने के साथ-साथ उसमें बदलाव भी हो सकता है ETag


दिलचस्प है, लेकिन मैं "अंतिम संशोधित" चेक पर "समान" चेक का उपयोग क्यों करूंगा? क्या लाभ हैं? यदि आपके पास सेवा करने के लिए एक फाइल है, तो कौन सा बेहतर विकल्प है?
टॉवर

7
कंप्यूटर के साथ, समय नाजुक है। लीप सेकंड, दिन के प्रकाश बचत समय और गलत घड़ियों के बीच स्विच करना, सभी गलत परिणाम वापस करने के लिए "अंतिम संशोधित" चेक का कारण बन सकते हैं। सामग्री की तुलना स्वयं (या सामग्री के MD5 हैश) उन मुद्दों से बचा जाता है।
देवदंके

इसके बावजूद कि मैं @devdanke को पूरी तरह से समझता हूं, मैं कहूंगा कि टाइमस्टैम्प की जाँच करना md5sum की जाँच करने की तुलना में बहुत तेज़ है। इन हेडरों का उद्देश्य इसे तेजी से बनाना है, कभी-कभी यह पसंद किया जाता है कि मैं किसी इकाई के ग्राहक को आई / ओ के साथ लोड करने की बजाय किसी इकाई के नए संस्करण को स्थानांतरित न करूं। वैसे भी, उपयोगकर्ता हमेशा ctrl + shift + R (या ctrl + F5 या जो भी हो) दबा सकता है
दुख

13

अंतिम-संशोधित / यदि-संशोधित-चूंकि सीमित समय में उपयोग किया जाने वाला टाइमस्टैम्प मान है - एक सेकंड और वह केवल तेजी से बदलती सामग्री के लिए पर्याप्त नहीं है, उदाहरण के लिए, वेब-चैट एप्लिकेशन जहां किसी भी दूसरे पर एक से अधिक संदेश पोस्ट किए जा सकते हैं । ETag / if-none-Match उस समस्या को हल करने में मदद कर सकता है।


9

जैसा कि यह Google की सर्वोत्तम प्रथाओं में बताया गया है:

सभी कैच करने योग्य संसाधनों के लिए, समाप्ति या कैश-नियंत्रण की अधिकतम आयु और अंतिम-संशोधित या ETag में से एक को निर्दिष्ट करना महत्वपूर्ण है। यह समाप्ति और कैश-नियंत्रण दोनों को निर्दिष्ट करने के लिए अनावश्यक है: अधिकतम-आयु, या अंतिम-संशोधित और ETag दोनों को निर्दिष्ट करने के लिए।

https://developers.google.com/speed/docs/best-practices/caching


उस URL में अब उसके जैसा पाठ नहीं है। उपयोग करने के खिलाफ कोई प्रतिबंध Last-Modifiedके साथ ETag(या UserAgent तरफ,, If-Modified-Sinceसाथ If-None-Match) उल्लेख किया है। इसी तरह W3 कल्पना आपको प्रतिबंधित नहीं करती है। यह उपयोग करने के लिए नहीं कहते हैं If-Modified-Sinceके साथ If-Matchहै, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि दस्तावेजों के रूप में ETag द्वारा परिभाषित किया गया है कि दिनांक, लेकिन एक ही सामग्री को अद्यतन किया है के सेट काफी छोटा होना चाहिए।
एमपाग


3

जब तक सर्वर द्वारा कमजोर नहीं कहा जाता है, तब तक एक ETag को एक मजबूत सत्यापनकर्ता माना जाता है, और इस प्रकार इसका उपयोग सशर्त रंगीन अनुरोध को पूरा करने के लिए किया जा सकता है। हालाँकि, स्वचालित रूप से उत्पन्न ETags सर्वर फ़ार्म स्थितियों में कठिनाइयों का प्रदर्शन करते हैं, क्योंकि वे अक्सर इनकोड जानकारी और / या एक अद्वितीय लगातार काउंटर का उपयोग करते हैं। व्यवहार में, मैंने लास्ट मोडिफाइड हेडर को काफी स्टैटिक कंटेंट के लिए पर्याप्त पाया है, जैसे कि प्रोटेक्टेड स्टैटिक कंटेंट परोसना, क्योंकि फाइल का राइट टाइम काफी हद तक वैलिडेटर बनाता है।

ETag अब तक का सबसे लचीला है। अनुरूप ग्राहकों को सशर्त अनुरोध में ETag भेजने की आवश्यकता होती है, जबकि वे उपलब्ध होने पर दोनों भेजते हैं।


0

इफ़-मॉडिफ़ाइड-चूंकि हेडर का उपयोग उस समय को निर्दिष्ट करने के लिए किया जाता है जिस पर ब्राउज़र ने पिछली बार अनुरोधित संसाधन प्राप्त किया था। If-none-Match हैडर का उपयोग उस इकाई टैग को निर्दिष्ट करने के लिए किया जाता है जिसे सर्वर ने अनुरोधित संसाधन के साथ जारी किया था जब इसे अंतिम बार प्राप्त किया गया था।

वर्णित दो तरीकों में, इन हेडरों का उपयोग ब्राउज़र के भीतर सामग्री के कैशिंग का समर्थन करने के लिए किया जाता है, और वे सर्वर को संसाधन की पूरी सामग्री के साथ प्रतिक्रिया करने के बजाय संसाधन की कैश्ड कॉपी का उपयोग करने के लिए निर्देश देने में सक्षम करते हैं यदि यह है आवश्यक नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.