क्या मुझे HTTP GET अनुरोधों के लिए सामग्री-प्रकार के शीर्ष लेख की आवश्यकता है?


154

जहां तक ​​मुझे समझ में आया कि सामग्री के प्रकार सेट करने के लिए दो स्थान हैं:

  1. ग्राहक उस सामग्री के लिए एक प्रकार सेट करता है जिसे वह सर्वर पर भेज रहा है (जैसे पोस्ट के लिए)
  2. प्रतिक्रिया के लिए सर्वर एक सामग्री प्रकार सेट करता है।

क्या इसका मतलब यह है कि मुझे अपने सभी अनुरोधों (क्लाइंट पक्ष) के लिए एक सामग्री प्रकार निर्धारित नहीं करना चाहिए या नहीं करना चाहिए। और अगर मैं कर सकता हूँ या क्या सामग्री प्रकार होना चाहिए?

इसके अलावा, मैंने कुछ पोस्टों में पढ़ा है कि क्लाइंट का कंटेंट टाइप निर्दिष्ट करता है कि क्लाइंट किस प्रकार का कंटेंट प्राप्त करना चाहता है। तो शायद मेरी बात 1 सही नहीं है?

जवाबों:


112

RFC 7231 सेक्शन 3.1.5.5 के अनुसार :

एक प्रेषक जो एक संदेश देता है जिसमें पेलोड बॉडी होती है SHOULD उस संदेश में एक कंटेंट-टाइप हेडर फ़ील्ड जनरेट करता है, जब तक कि संलग्न प्रतिनिधित्व का इच्छित मीडिया प्रकार प्रेषक के लिए अज्ञात न हो। यदि कोई सामग्री-प्रकार का हेडर फ़ील्ड मौजूद नहीं है, तो प्राप्तकर्ता MAY या तो "एप्लिकेशन / ऑक्टेट-स्ट्रीम" ( [RFC2046], धारा 4.5.1 ) का मीडिया प्रकार ग्रहण करता है या उसके प्रकार को निर्धारित करने के लिए डेटा की जांच करता है।

इसका अर्थ है कि Content-TypeHTTP शीर्ष लेख केवल PUTऔर POSTअनुरोधों के लिए सेट किया जाना चाहिए ।


5
@ इपोक, उद्धृत संदेश सबसे अच्छा निहित है। यह वास्तव में यह नहीं कहता है कि निकाय-निकाय के संदेशों SHOULD NOTमें एक सामग्री-प्रकार शामिल है। क्या हमारे पास एक स्पष्ट उद्धरण है?
पचेरियर

1
@Pacerier कृपया किसी और के उत्तर के मूल निष्कर्ष पर प्रहार न करें, भले ही वह गलत हो। मैं मानता हूं कि एपोक का उत्तर गलत है - जिस खंड में वह उद्धृत किया गया है, उसके उत्तर के निष्कर्ष के बारे में कुछ भी नहीं है, और यह अस्वीकृत होने के योग्य है। लेकिन इसका मतलब यह नहीं है कि आपको इसके मूल आधार को खत्म करने के लिए उत्तर को संपादित करना चाहिए और इस तरह इसके अर्थ को पूरी तरह से बदल देना चाहिए।
मार्क एमी

8
मुझे लगता है कि आप लोग @ एपोक के शब्दों को भी सचमुच पढ़ रहे हैं। निश्चित रूप से, उद्धृत अनुभाग का मतलब यह नहीं है कि वह क्या कहता है इसका मतलब है। लेकिन मुझे लगता है कि निष्कर्ष ओपी प्रश्न के संदर्भ में सही है। ओपी स्पष्टता की तलाश में है कि कब वह सामग्री-प्रकार को शामिल करने के लिए समझ में आता है और कब नहीं। एपोक ने हेडर का उपयोग कैसे किया जाता है, इसके बारे में जानकारी दी और निष्कर्ष निकाला कि कोई भी उचित डेवलपर: आपको "पेलोड बॉडीज (मुख्य रूप से PUT और POST) वाले अनुरोधों के लिए एक सामग्री-प्रकार का उपयोग करना चाहिए" और आपको शायद "उपयोग नहीं करना चाहिए" उन जगहों पर जहां यह उपयोगी नहीं है, जैसे GET या HEAD, आदि
JVMATL

1
आपका पोस्ट स्टेटमेंट, "इसका मतलब है।" - एक खिंचाव है।
एड्रियन बार्थोलोम्यू

64

अनुरोध प्राप्त करने के लिए सामग्री-प्रकार नहीं होना चाहिए क्योंकि उनके पास अनुरोध इकाई नहीं है (अर्थात, एक निकाय)


31
@ डमिट, प्रशस्ति पत्र की जरूरत है , अन्यथा यह एक धारणा के रूप में है, एक तथ्य के रूप में नहीं।
पचेरियर

6
हालांकि मैं मानता हूं कि युक्ति यह नहीं कहती है कि आपके पास GET पर कंटेंट-टाइप नहीं हो सकता है, .Net इसे Http://ClickClient में लागू करने के लिए लगता है। देखें stackoverflow.com/questions/10679214/...
एडम

37

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

वे हालांकि वैकल्पिक हैं।

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1


27

स्वीकृत उत्तर गलत है। उद्धरण सही है, यह दावा कि PUT और POST में यह गलत है। इसमें कोई आवश्यकता नहीं है कि वास्तव में PUT या POST में अतिरिक्त सामग्री है। और न ही वास्तव में सामग्री प्राप्त करने वाले जीईटी के खिलाफ निषेध है।

RFC का ठीक वही अर्थ है जो उनका मतलब है .. IFF आपके पक्ष (क्लाइंट या मूल सर्वर) HTTP हेडर से परे अतिरिक्त सामग्री भेज रहा होगा, यह एक कंटेंट-टाइप हेडर को निर्दिष्ट करता है। लेकिन ध्यान दें कि सामग्री-प्रकार को छोड़ना अभी भी स्वीकार्य है और इसमें सामग्री (लंबाई सामग्री हेडर का उपयोग करके) भी शामिल है।


0

संक्षिप्त उत्तर: सबसे अधिक संभावना है, नहीं, आपको HTTP GET अनुरोधों के लिए सामग्री-प्रकार के शीर्ष लेख की आवश्यकता नहीं है । लेकिन ऐनक HTTP HTTP GET के लिए एक कंटेंट-टाइप हेडर को नियमबद्ध नहीं करता है।

सहायक सामग्री:

  1. "सामग्री-प्रकार" प्रतिनिधित्व (यानी पेलोड) मेटाडेटा का हिस्सा है। RFC 7231 खंड 3.1 से उद्धृत :

    3.1। प्रतिनिधित्व मेटाडेटा

    प्रतिनिधित्व हेडर फ़ील्ड प्रतिनिधित्व के बारे में मेटाडेटा प्रदान करते हैं। जब एक संदेश में एक पेलोड बॉडी शामिल होती है, तो प्रतिनिधित्व हेडर फ़ील्ड यह बताता है कि पेलोड बॉडी में दर्शाए गए प्रतिनिधित्व डेटा की व्याख्या कैसे करें। ...

    निम्नलिखित शीर्ष लेख फ़ील्ड प्रतिनिधित्व मेटाडेटा को व्यक्त करते हैं:

    +-------------------+-----------------+
    | Header Field Name | Defined in...   |
    +-------------------+-----------------+
    | Content-Type      | Section 3.1.1.5 |
    | ...               | ...             |
    

    RFC 7231 खंड 3.1.1.5 से उद्धृत (वैसे, वर्तमान चुने गए उत्तर में अनुभाग संख्या में एक टाइपो था):

    "सामग्री-प्रकार" शीर्ष लेख फ़ील्ड संबंधित प्रतिनिधित्व के मीडिया प्रकार को इंगित करता है

  2. उस अर्थ में, एक Content-Typeहेडर वास्तव में HTTP GET अनुरोध (या उस मामले के लिए POST या PUT अनुरोध) के बारे में नहीं है। यह ऐसे किसी भी अनुरोध के अंदर पेलोड के बारे में है । इसलिए, यदि कोई पेलोड नहीं होगा, तो कोई आवश्यकता नहीं है Content-Type। व्यवहार में, कुछ कार्यान्वयन आगे बढ़े और यह समझ में आता है। एडम की टिप्पणी से उद्धृत :

    "हालांकि, कल्पना यह नहीं कहती है कि आपके पास GET पर कंटेंट-टाइप नहीं हो सकता है। नेट इसे HESpClient में लागू करता है। यह SO q & a देखें ।"

  3. हालांकि, कड़ाई से बोलते हुए, ऐनक ही नहीं मिलता है HTTP GET की संभावना में एक पेलोड होता है। RFC 7231 खंड 4.3.1 से उद्धृत :

    4.3.1 जी.ई.टी.

    ...

    GET अनुरोध संदेश के भीतर एक पेलोड में कोई परिभाषित शब्दार्थ नहीं है; GET अनुरोध पर पेलोड बॉडी भेजने से अनुरोध को अस्वीकार करने के लिए कुछ मौजूदा कार्यान्वयन हो सकते हैं।

    इसलिए, यदि आपका HTTP GET किसी भी कारण से पेलोड को सम्‍मिलित करने के लिए होता है, तो Content-Typeहैडर संभवत: उचित है।


-2

जीईटी संदेश पर सामग्री-प्रकार से अधिक नहीं गुजरने के साथ समस्या यह है कि सामग्री-प्रकार अप्रासंगिक है क्योंकि सर्वर पक्ष सामग्री को वैसे भी निर्धारित करता है। मैंने जो समस्या का सामना किया है, वह यह है कि अब बहुत सारी जगहें हैं, जो आपके द्वारा उपयोग की जाने वाली सामग्री-प्रकार को लेने के लिए पर्याप्त रूप से स्मार्ट होने के लिए अपने webservices को सेट करती हैं और आपके द्वारा अनुरोध किए गए 'प्रकार' में प्रतिक्रिया वापस करती हैं। उदाहरण के लिए। वर्तमान में हम एक ऐसी जगह के साथ संदेश भेज रहे हैं, जो JSON के लिए डिफॉल्ट करता है, हालांकि, उन्होंने अपना वेबसेवा सेट किया है ताकि यदि आप xml का एक कंटेंट-टाइप पास करते हैं तो वे अपने JSON डिफॉल्ट के बजाय xml वापस आ जाएंगे। जो मुझे लगता है कि आगे बढ़ना एक महान विचार है

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