HTTP हेडर केस-संवेदी हैं?


712

एक ब्लॉग पोस्ट में मैं प्रतिक्रिया की सामग्री-प्रकार सेट करने के लिए निम्न PHP का उपयोग करता हूं:

header('content-type: application/json; charset=utf-8');

मुझे बस उस पोस्ट पर एक टिप्पणी मिली जिसमें कहा गया था कि content-typeपूंजीकरण करने की आवश्यकता है Content-type। क्या ये सही है? यह मेरे लिए सभी लोअर-केस के साथ काम करता है, और मैंने माना कि HTTP हेडर केस-असंवेदनशील थे। या यह सिर्फ इसलिए काम करता है क्योंकि ब्राउज़र अच्छे हैं?


26
यह असंवेदनशील है, लेकिन यदि आप मामला ठीक करने जा रहे हैं, तो यह 'सामग्री-प्रकार' होना चाहिए।
mc0e

10
एफडब्ल्यूआईडब्ल्यू, एप्लिकेशन / जोंस के साथ "चारसेट" भेजना व्यर्थ है। ऐसा कोई पैरामीटर नहीं है।
जूलियन रेसके ने

5
@ जूलियनचेक - यह झूठा है, चारसेट कंटेंट-टाइप हेडर के भीतर एक वैध पैरामीटर है। देखें w3.org/International/articles/http-charset/index और developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
cchamberlain

8
@NullUserException - डाउनसाइड (व्यर्थ बाइट्स से अलग) लोगों को चारसेट परम के बारे में भ्रमित करना जारी रखना है। इसके बजाय बस उन घटकों को ठीक करें।
जूलियन रेसके ने

10
@ जूलियनसचेक सही है। IANA आवेदन / json काम कहते हैं चारसेट इस मीडिया प्रकार के लिए अर्थहीन है। यह कुछ भी नहीं करता है। कृपया इसे न जोड़ें, क्योंकि यह शोर है जो अनावश्यक भ्रम पैदा करता है।
मोनिका 2331977

जवाबों:


934

हैडर के नाम संवेदनशील नहीं होते हैं।

से RFC 2616 - "हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल - HTTP / 1.1" , खंड 4.2, "संदेश हेडर" :

प्रत्येक शीर्ष लेख फ़ील्ड में एक कॉलोन (":") और फ़ील्ड मान के बाद एक नाम होता है। फ़ील्ड नाम केस में संवेदनशील होते हैं।

अद्यतन RFC 7230 इस भाग में RFC 2616 से किसी भी परिवर्तन को सूचीबद्ध नहीं करता है ।


96
उत्तर अभी भी सही है, RFC 7230 कहता है: "प्रत्येक हेडर फ़ील्ड में एक केस-असंवेदनशील फ़ील्ड नाम होता है, जिसके बाद एक कोलोन (": "), वैकल्पिक प्रमुख व्हाट्सएप, फ़ील्ड मान और वैकल्पिक ट्रेलिंग व्हाट्सएप होता है।"
मार्टिन मूलर

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

7
क्या कोई लोकप्रिय ब्राउज़र का उदाहरण प्रदान कर सकता है जो इस संबंध में कल्पना का पालन नहीं करता है?
डेविड डब्ल्यू

7
@ यह केवल इसलिए है क्योंकि PHP में स्ट्रिंग तुलना केस-संवेदी है।
MrWhite

7
किसी को भी देखने के लिए, यहाँ RFC 7230 स्पष्ट रूप से कहा गया है कि फील्ड हेडर को असंवेदनशील माना जाना चाहिए: tools.ietf.org/html/rfc7230#section-3.2
JZ

238

RFC 2616 के अनुसार HTTP हेडर के नाम केस-असंवेदनशील हैं :

4.2:

प्रत्येक शीर्ष लेख फ़ील्ड में एक कॉलोन (":") और फ़ील्ड मान के बाद एक नाम होता है। फ़ील्ड नाम केस-असंवेदनशील हैं।

(फ़ील्ड मान केस-संवेदी हो सकते हैं या नहीं भी।)

यदि आप इसके द्वारा पालन करने के लिए प्रमुख ब्राउज़रों पर भरोसा करते हैं, तो आप सभी तैयार हैं।


Btw, HTTP के सबसे विपरीत, विधियों (क्रियाओं) कर रहे हैं केस संवेदी:

५.१.१ विधि

विधि टोकन
अनुरोध-URI द्वारा पहचाने गए संसाधन पर निष्पादित की जाने वाली विधि को इंगित करता है । विधि केस-संवेदी है।

   Method         = "OPTIONS"                ; Section 9.2
                  | "GET"                    ; Section 9.3
                  | "HEAD"                   ; Section 9.4
                  | "POST"                   ; Section 9.5
                  | "PUT"                    ; Section 9.6
                  | "DELETE"                 ; Section 9.7
                  | "TRACE"                  ; Section 9.8
                  | "CONNECT"                ; Section 9.9
                  | extension-method
   extension-method = token

एक अन्य टिप्पणी में कहा गया है कि यह उत्तर बाधित है। क्या यह सच है? यदि हां, तो शायद आप इसे अपडेट कर सकते हैं ताकि लोग भ्रमित न हों।
स्पीडप्लेन

36

tldr; HTTP / 1.1 और HTTP / 2 हेडर दोनों केस-असंवेदनशील हैं।

के अनुसार आरएफसी 7230 (HTTP / 1.1):

प्रत्येक हेडर फ़ील्ड में एक केस-असंवेदनशील फ़ील्ड नाम होता है, जिसके बाद एक कोलोन (":"), वैकल्पिक अग्रणी व्हाट्सएप, फ़ील्ड मान और वैकल्पिक ट्रेलिंग व्हाट्सएप होता है।

https://tools.ietf.org/html/rfc7230#section-3.2

इसके अलावा, RFC 7540 (HTTP / 2):

जैसे HTTP / 1.x में, हेडर फ़ील्ड नाम ASCII
वर्णों के तार होते हैं, जिनकी तुलना केस-इनसेटिव फैशन में की जाती है।

https://tools.ietf.org/html/rfc7540#section-8.1.2


19
सिर्फ स्पष्ट करना: फ़ील्ड नाम असंवेदनशील हैं; फ़ील्ड मान केस-संवेदी हो सकते हैं, जो फ़ील्ड नाम पर निर्भर करता है।
जूलियन रेसके ने

7
HTTP / 2 RFC से निरंतर उद्धरण: "हालाँकि, शीर्ष लेख फ़ील्ड के नाम HTTP / 2 में उनके एन्कोडिंग से पहले लोअरकेस में परिवर्तित किए जाने चाहिए। अपरकेस हेडर फ़ील्ड नामों के अनुरोध या प्रतिक्रिया को जरूरी माना जाना चाहिए (धारा 8.1.6.6)"
बोरक बर्नार्ड

1
मैंने सिर्फ "MUST को लोअरकेस में कनवर्ट किया जाना चाहिए ..." भाग पर ध्यान दिया। ऐसा क्यों है? CamelCase को व्यवहार में आवरण (डेवलपर टूल, लोकप्रिय कोड लाइब्रेरी) पसंद किया जाता है, तो HTTP / 2 उस प्रवृत्ति के खिलाफ जाने का प्रयास क्यों करेगा?
जिंप

7
@ जिम्प - क्योंकि मानक स्थिरता के बारे में हैं - ऊँट-केस का उपयोग अस्पष्ट हो सकता है - विशेष रूप से संक्षिप्तीकरण, आरंभीकरण और सारांश के साथ। उदाहरण के लिए - क्या यह "फ्रंट-एंड-एचटीपीएस" या "फ्रंट-एंड-एचटीटीपीएस" - "डब्ल्यूडब्ल्यूडब्ल्यू-ऑथेंटिकेट" या "डब्ल्यूडब्ल्यूडब्ल्यू-ऑथेंटिकेट" होगा - सभी लोअरकेस को निर्दिष्ट करना क्षेत्र को मानकीकृत करने के लिए अस्पष्टता को हटाता है। यह बदले में हेडर को चौतरफा संभालना आसान बनाता है।
फ्रेजर

16

header('Content-type: image/png') PHP 5.5 के साथ काम नहीं किया IE11 सेवारत, जैसा कि छवि धारा में पाठ के रूप में दिखाया गया था

header('Content-Type: image/png') काम किया, जैसा कि छवि में छवि के रूप में दिखाई दिया

केवल अंतर राजधानी 'टी' है।


18
फिर स्पष्ट रूप से कार्यान्वयन में समस्या है क्योंकि सभी हेडर फ़ील्ड को केस-असंवेदनशील के रूप में पढ़ना चाहिए। अपाचे बेंच भी गड़बड़ है। यह लोअरकेस फ़ील्ड नामों को पसंद नहीं करता है।
बंधन

8

वे मामले के प्रति संवेदनशील नहीं हैं। वास्तव में NodeJS वेब सर्वर अनुरोध वस्तु में उपलब्ध कराने से पहले स्पष्ट रूप से उन्हें निचले मामले में परिवर्तित करता है

यहां यह ध्यान रखना महत्वपूर्ण है कि सभी हेडर को केवल निचले मामले में दर्शाया जाता है, इस बात की परवाह किए बिना कि क्लाइंट ने वास्तव में उन्हें कैसे भेजा। यह जो भी उद्देश्य के लिए हेडर को पार्स करने के कार्य को सरल करता है।


ऐसा इसलिए है क्योंकि नोड / जावास्क्रिप्ट केस-संवेदी है, इसलिए चीजों को सरल बनाने के लिए वे लोअर-केस के लिए सब कुछ सामान्य करते हैं, जिसका अर्थ है कि HTTP हेडर प्रभावी रूप से असंवेदनशील हैं।
श्वेष

4

HTTP के लिए RFC (जैसा कि ऊपर उद्धृत किया गया है) बताता है कि शीर्षलेख केस-असंवेदनशील हैं, हालाँकि आप पाएंगे कि कुछ ब्राउज़रों के साथ (मैं आपको देख रहा हूँ, IE) जो कि प्रत्येक शब्द को कैपिटलाइज़ करना सबसे अच्छा होता है:

Location: http://stackoverflow.com

Content-Type: text/plain

बनाम

location: http://stackoverflow.com

content-type: text/plain

यह "HTTP" मानक नहीं है, लेकिन केवल एक और ब्राउज़र quirks है, जिसे हम डेवलपर्स के रूप में सोचते हैं।


3
क्या आप उस पर कोई सबूत दे सकते हैं?
जूलियन रेसचेक

3
मेरा मतलब था एक ठोस परीक्षण का मामला; मेरे पास परीक्षण करने के लिए IE है।
जूलियन रेस्चेक

11
वास्तव में यह सबसे अच्छा क्यों होता है?
शविश

मैं एक ब्राउज़र
बनाऊंगा

0

आधिकारिक तौर पर, हेडर केस असंवेदनशील होते हैं, हालांकि, हर शब्द के पहले अक्षर को कैपिटलाइज़ करना आम बात है।
लेकिन, क्योंकि यह आम बात है, IE जैसे कुछ कार्यक्रमों का मानना ​​है कि हेडर पूंजीकृत हैं।
इसलिए जब डॉक्स कहते हैं कि मामला असंवेदनशील है, खराब प्रोग्रामर ने मूल रूप से डॉक्स बदल दिए हैं।


-4

हेडर्स शब्द केस संवेदी नहीं है, लेकिन कंटेंट-टाइप की तरह दाईं ओर, इसे इस तरह से लिखने का अच्छा अभ्यास है, क्योंकि इसका केस सेंसिटिव है। नीचे मेरे उदाहरण की तरह

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