2010-01-21 14 views
41

निम्न HTTP 1.1 शीर्षलेख का क्या अर्थ है?HTTP शीर्षलेख क्या है यदि कोई नहीं-मैच: * मतलब है?

तो कोई मिलान नहीं: *

मैं जब एक मजबूत या कमजोर ETag या यहाँ तक कि ETags की एक सूची का उपयोग कर इसे समझते हैं, लेकिन मैं यह फायदा नहीं है understant नहीं है स्टार का उपयोग करते समय (*) ।

संपादित करें: कुछ छद्म कोड (PHP कोड अच्छा भी) होना अच्छा लगेगा जो दिखाएगा कि "अगर-कोई नहीं-मैच: *" का जवाब कैसे दिया जाए।

उत्तर

36

उत्तर है: यह निर्भर करता है।

मान लीजिए हम

If-None-Match: * 
If-Modified-Since: <yesterday date> 

प्राप्त हुआ है और पेज बदल दिया गया है आज

सबसे पहले, हम * पर एक नज़र डालें जो हमें बताता है: "संसाधन 30 है और स्थिति (2) पूरी हो जाती है"। ठीक है, संसाधन मौजूद है, लेकिन शर्त (2) कहती है: "दिनांक 304 लौटाएं, अगर तिथि वर्तमान से बाद में है"। तो यह स्थिति पूरी नहीं हुई है, और पृष्ठ पूरी तरह से वितरित किया जाएगा।

अगर हम If-Modified-Since प्राप्त नहीं था, प्रतिक्रिया 304

हो गया होता संसाधन अनुरोध पर ही अस्तित्व में नहीं था, तो हम उचित कोड वापस आ गए हैं (जैसे कि वहाँ था कोई If-None-Match)।

304 केवल जीईटी और हेड अनुरोधों के जवाब में वापस लौटाया जाना चाहिए, और सभी कैश से संबंधित प्रतिक्रिया शीर्षलेखों को वहां होना चाहिए। अन्य सभी प्रकार के अनुरोधों के लिए आपके सर्वर को 412 का उत्तर देने की आवश्यकता है (पूर्व शर्त विफल)।

मुझे आशा है कि यह मदद करता है;)

+0

तो जब आपके पास * अगर कोई नहीं है- 304 जारी करने का एकमात्र तरीका है तो क्या है यदि संशोधित-चूंकि सेट और मिलान हो रहा है? – AlexV

+1

या तो, या बिना 'अगर-संशोधित-चूंकि' के बिना। तो 2 तरीके हैं। –

10

RFC 2616 (HTTP 1.1) से हवाला देते हुए:

... अगर "*" दिया जाता है और किसी भी वर्तमान इकाई है कि संसाधन के लिए मौजूद है, तो सर्वर का अनुरोध विधि को नहीं करना चाहिए, जब तक ऐसा क्योंकि संसाधन के करने के लिए आवश्यक संशोधन दिनांक अनुरोध में विफल होने पर मेल खाने में विफल रहता है जो अनुरोध में हेडर फ़ील्ड के बाद से संशोधित है।

आरएफसी कहना है कि अनुरोध करने के बजाय, सर्वर प्राप्त और सिर अनुरोधों के लिए 304 (संशोधित नहीं) के साथ जवाब देना चाहिए, और कहा कि वे (पूर्वशर्त विफल) अन्य सभी अनुरोध प्रकार के लिए 412 के साथ जवाब देना चाहिए पर चला जाता है । लेकिन यह केवल तभी होता है जब सर्वर में वास्तव में अनुरोधित संसाधन का कुछ संस्करण हो। यदि आपके पास कोई संस्था नहीं है, तो आप अनुरोध को संभालना चाहिए (शायद 404 के साथ जब आपके पास कुछ भी नहीं है)।

अनुरोध को संभालने के लिए, पहले यह पता लगाएं कि सर्वर क्या करेगा यदि वह शीर्षलेख मौजूद नहीं था। यदि उस अनुरोध का परिणाम 2xx या 304 हो, तो अनुरोध सामान्य के रूप में कार्य करें। लेकिन अगर अनुरोध का परिणाम 2xx या 304 होगा, तो if-None-modified केस को संभालें। जब यह एक सितारा होता है, तो तुरंत 304 लौटें (जब तक कि अगर संशोधित-से-कम नहीं हो जाता)। यदि यह एक या अधिक इकाई टैग है, तो जांचें कि इनमें से कोई भी टैग उस चीज़ के टैग से मेल खाता है जिसे आप प्रतिक्रिया के रूप में सेवा देने की योजना बना रहे थे। यदि कोई मैच है, तो 304 लौटाएं; यदि कोई मैच नहीं है, तो सामान्य रूप से इसे सेवा दें।

आरएफसी में बाद में, वहाँ और भी है:

"यदि कोई मिलान नहीं: *" का अर्थ (या एक से है कि विधि यदि अभिव्यक्ति मूल सर्वर द्वारा चयनित नहीं किया जाना चाहिए कैश, संभवतः वेरी तंत्र का उपयोग करके, अनुभाग 14.44 देखें) मौजूद है, और यदि प्रतिनिधित्व मौजूद नहीं है तो प्रदर्शन किया जाना चाहिए। यह सुविधा PUT संचालन के बीच दौड़ को रोकने में उपयोगी होने का इरादा है।

है, स्टार ग्राहक कहने के लिए, की अनुमति देता है "अगर वहाँ है इस फ़ाइल के किसी भी संस्करण पहले से ही वहाँ इस फाइल न रखें।"

+3

और क्या इस सादे अंग्रेजी में मतलब है? यदि * आपूर्ति की जाती है तो मैं सामान्य रूप से पृष्ठ की सेवा करता हूं (304 के बिना)? भले ही अगर संशोधित-चूंकि आपूर्ति की जाती है ... – AlexV