2012-08-26 14 views
22

HTTP/1.1 Accept अनुरोध शीर्षलेख RFC 2616, section 14.1 में निर्दिष्ट है।खाली HTTP स्वीकृति हेडर की व्याख्या कैसे करें?

यह वाक्य रचना इस तरह दिया जाता है:

Accept   = "Accept" ":" 
        #(media-range [ accept-params ]) 

# किसी भी संख्या के बिना कहा गया शून्य या अधिकsection 2.1 के अनुसार। हालांकि, धारा 14.1 खाली Accept शीर्षलेख की व्याख्या करने के बारे में कोई बयान नहीं देता है। यह section 14.2 के विपरीत है, जो Accept-Encoding के बारे में बात करता है, जहां न केवल 1# का उपयोग किया जाता है (एक या अधिक), लेकिन खाली Accept-Encoding शीर्षलेख के लिए भी मामला निर्दिष्ट है, जो कि अजीब तरह का है। अनुरोध हेडर से निपटने वाले कुछ अन्य अनुभाग खाली मूल्य के विशेष मामले पर भी विशिष्ट हैं।

एक एक न के बराबरAccept शीर्षक के समतुल्य रूप एक खालीAccept हैडर का इलाज करना चाहिए? क्या इस पर कोई आधिकारिक संसाधन याद आया है?

उत्तर

22

RFC2616 Sec4.2 से: और क्षेत्र मूल्य:

प्रत्येक हेडर फ़ील्ड एक नाम एक कॉलन ("") के बाद के होते हैं।

पहली नज़र में, ऐसा लगता है कि यह विकृत, गैर-अनुपालन श्रेणी में खाली शीर्षलेख मान निर्दिष्ट करता है। हालांकि, संवर्धित BNF रूप RFC2616 Sec2.1 में उल्लिखित इंगित करता है कि

"#element" सहित शून्य

किसी भी संख्या, की अनुमति देता है इस शीर्ष लेख मान स्वीकार निर्दिष्ट करने के लिए प्रयोग किया जाता है घोषणा है के रूप में, ऐसा लगता है कि खाली मान वैध हैं।

क्षेत्र-सामग्री उसके आगे या पीछे एलडब्ल्यूएस शामिल नहीं है:: रैखिक सफेद स्थान से पहले होने वाली

खाली हेडर और कुछ नहीं बल्कि सफेद स्थान के साथ शीर्ष लेख पार्स कल्पना से निम्नलिखित निर्देशन के कारण समस्या हो सकती है फील्ड-वैल्यू का पहला गैर-व्हाइटस्पेस वर्ण या फ़ील्ड-वैल्यू के अंतिम गैर-व्हाइटस्पेस वर्ण के बाद। इस तरह के अग्रणी या पीछे वाले एलडब्लूएस मई को के बिना फील्ड वैल्यू के अर्थशास्त्र को बदल दिया जा सकता है। फ़ील्ड-सामग्री के बीच होने वाली कोई भी LWS फ़ील्ड मान या संदेश डाउनस्ट्रीम को अग्रेषित करने से पहले एक एसपी के साथ प्रतिस्थापित की जा सकती है।

IMHO, एक खाली शीर्षलेख भेजना पूरी तरह से व्यर्थ है। यह नहीं किया जाना चाहिए, और पार्सर्स इन शीर्षकों को सही ढंग से पार्स नहीं कर सकते हैं।परंपरागत रूप से, लोग हैं, जो ऐसी सीमाओं जब असंगत घटक के साथ काम को नाकाम करना चाहते हैं इस तरह निर्दिष्ट किया है "छद्म खाली" मान:

X-MyCustomHeader: ""

आप बस को मान्य करने के लिए कि एक शीर्ष लेख क्षेत्र कुछ के रूप में भेजा गया था चाहते हैं बुलियन स्विच का रूप, खाली मूल्य के बजाय उपरोक्त की तरह प्लेसहोल्डर मान भेजने पर विचार करें।


अद्यतन

मुझे लगता है मैं सीधे सवाल का जवाब देने में बहुत स्पष्ट नहीं था:

  • एक भेजें: एक खाली स्वीकार हैडर के मामले में आप वास्तव में दो विकल्प हैं 406 Not Acceptable क्लाइंट को सूचित करने के लिए प्रतिक्रिया कि आप खाली स्वीकृति मूल्य (डुह) के लिए कोई सामग्री प्रकार प्रदान नहीं करते हैं।

यह उचित है, लेकिन RFC2616 Sec14.1 द्वारा जरूरी नहीं:

एक स्वीकार हेडर फ़ील्ड मौजूद न हो, और यदि सर्वर एक प्रतिक्रिया जो संयुक्त स्वीकार क्षेत्र मूल्य के अनुसार स्वीकार्य है नहीं भेज सकते हैं , तो सर्वर को 406 (स्वीकार्य नहीं) प्रतिक्रिया भेजनी चाहिए।

  • या, क्योंकि यह आवश्यक नहीं है और यह अत्यधिक संभावना नहीं उपयोगकर्ता किसी भी सामग्री-प्रकार को स्वीकार नहीं करता है (अन्यथा, क्यों वे अनुरोध भेजने के लिए परेशान हैं?) ... मेरा सुझाव है एक खाली Accept: मान का इलाज (यदि संदेश अस्वीकृति एक विकल्प नहीं है) Accept: */* जैसा ही है।
+0

मैं खाली हेडर पर असहमत होने पर असहमत हूं, खासकर जब स्पेक स्वयं ही खाली हेडर को संदर्भित करता है (मेरा स्वीकार्य-एन्कोडिंग उदाहरण देखें)। संदर्भ देने के लिए, मैं अजगर वेब मिडलवेयर विकसित कर रहा हूं और घटनाओं के बारे में सोच रहा हूं और उनके खिलाफ परीक्षण कैसे कर सकता हूं। मैं '' */* '' मानने के लिए गया, जो मुझे भी उचित लगता है। समय लेने के लिए शुक्रिया! –

+0

मुझे यह भी लगता है कि '40 खराब अनुरोध '' '406 स्वीकार्य नहीं' से अधिक उपयुक्त होगा, कम से कम अगर हम मानते हैं कि यह कल्पना का उल्लंघन है। उस मामले में, हम यह समझने में असमर्थ थे कि ग्राहक वास्तव में क्या स्वीकार करता है। –

+0

आप जानते हैं, आप 2616-2.1 के बारे में सही हैं - 'तत्व 'फ़ॉर्म इंगित करता है कि खाली शीर्षलेख मान ठीक हैं। मैं इसे प्रतिबिंबित करने और गलत जानकारी से बचने के लिए अपना उत्तर अपडेट करने जा रहा हूं। साथ ही, मुझे लगता है कि यह या तो 406 प्रतिक्रिया देता है - या इसे 'स्वीकार करें: */* 'मान्य' जैसा व्यवहार करता है। लेकिन शायद 400 नहीं है क्योंकि यह तकनीकी रूप से एक अवैध संदेश नहीं है। – rdlowrey

4

http://tools.ietf.org/html/rfc7231#section-5.3.2 के अनुसार:

किसी भी बिना एक अनुरोध स्वीकार हेडर फ़ील्ड कि उपयोगकर्ता एजेंट जवाब में कोई भी मीडिया प्रकार स्वीकार करेंगे निकलता है।

आपको शीर्षलेख */* के रूप में एक मौजूदा अस्तित्व का इलाज करना चाहिए।

+0

सही है, लेकिन आप एक अप्रचलित विनिर्देश का हवाला देते हुए सही हैं। –

+0

वर्तमान विनिर्देश यह है: https://tools.ietf.org/html/rfc2616#section-14.1? – cd1

+1

सं। आरएफसी 2616 आरएफसी 7230 आदि द्वारा अप्रचलित कर दिया गया है –

संबंधित मुद्दे