Http होस्ट हेडर क्या है?


120

यह देखते हुए कि HTTP कनेक्शन भेजे जाने पर टीसीपी कनेक्शन पहले से ही स्थापित है, आईपी एड्रेस और पोर्ट को स्पष्ट रूप से जाना जाता है - एक टीसीपी कनेक्शन एक आईपी + पोर्ट है। तो, हमें Hostहेडर की आवश्यकता क्यों है ? क्या यह केवल उस मामले के लिए आवश्यक है जहां टीसीपी कनेक्शन में निहित आईपी पते पर कई होस्ट्स मैप किए गए हैं?

जवाबों:


140

hostहैडर वेबसर्वर जो बताता है आभासी मेजबान का उपयोग करने (यदि सेट)। आप कई उपनामों (= डोमेन और वाइल्डकार्ड-डोमेन) का उपयोग करके एक ही वर्चुअल होस्ट भी कर सकते हैं । इस मामले में, आपके पास अभी भी अपने वेब ऐप में उस हेडर को मैन्युअल रूप से पढ़ने की संभावना है यदि आप अलग-अलग डोमेन के आधार पर अलग-अलग व्यवहार प्रदान करना चाहते हैं। यह संभव है क्योंकि आपके वेबसर्वर में आप कर सकते हैं (और अगर मैं गलत नहीं हूँ तो आपको) डिफ़ॉल्ट होस्ट होने के लिए एक vhost सेट करना होगा । जब भी hostहेडर किसी भी कॉन्फ़िगर किए गए वर्चुअल होस्ट से मेल नहीं खाता है , तो इस डिफ़ॉल्ट vhost का उपयोग किया जाता है।

इसका मतलब है: आप इसे सही पाते हैं, हालांकि "एकाधिक होस्ट" कहना कुछ भ्रामक हो सकता है: मेजबान (संबोधित मशीन) एक ही है, जो वास्तव में आईपी पते पर हल हो जाता है वे अलग-अलग डोमेन नाम (उप डोमेन सहित) हैं जो भी संदर्भित हैं के रूप में होस्ट नामों (लेकिन मेजबान!)।

हालांकि सवाल का हिस्सा नहीं है, एक मजेदार तथ्य: इस विनिर्देश ने शुरुआती दिनों में एसएसएल के साथ समस्याओं को जन्म दिया क्योंकि वेब सर्वर को उस प्रमाणपत्र को वितरित करना होगा जो क्लाइंट द्वारा संबोधित डोमेन से मेल खाता है। हालाँकि, यह जानने के लिए कि किस प्रमाणपत्र का उपयोग करना है, वेबसर्वर को पहले से पता किया हुआ होस्टनाम पता होना चाहिए। लेकिन क्योंकि क्लाइंट उस जानकारी को केवल एन्क्रिप्ट किए गए चैनल पर भेजता है (जिसका अर्थ है: प्रमाणपत्र पहले ही भेजे जाने के बाद), सर्वर को यह मान लेना था कि आपने डिफ़ॉल्ट होस्ट को ब्राउज कर लिया है। इसका मतलब प्रति आईपी एड्रेस / पोर्ट-कॉम्बिनेशन में एक ssl-सुरक्षित डोमेन है।

यह सर्वर नाम संकेत के साथ दूर किया गया है ; हालाँकि, वह फिर से कुछ गोपनीयता तोड़ता है, क्योंकि सर्वर का नाम अब फिर से सादे पाठ में स्थानांतरित किया गया है, इसलिए हर आदमी को बीच में दिखाई देगा कि आप किस होस्टनाम से जुड़ने की कोशिश कर रहे हैं।

हालाँकि वेबसर्वर होस्टनाम को सर्वर नेम इंडिकेशन से जानता होगा, hostहेडर अप्रचलित नहीं है, क्योंकि सर्वर नेम इंडिकेशन जानकारी केवल TLS हैंडशेक के भीतर उपयोग की जाती है। असुरक्षित कनेक्शन के साथ, सर्वर नाम संकेत बिल्कुल नहीं है, इसलिए hostहेडर अभी भी वैध है (और आवश्यक है)।

एक और मज़ेदार तथ्य: अधिकांश वेबसर्वर्स (यदि सभी नहीं हैं) आपके http-रिक्वेस्ट को अस्वीकार कर देते हैं, अगर इसमें बिल्कुल एक hostहेडर नहीं है, भले ही इसे छोड़ा जा सकता हो क्योंकि केवल डिफ़ॉल्ट vhost कॉन्फ़िगर है। इसका मतलब है कि कम से कम एक http- (मिल-) अनुरोध में जानकारी की आवश्यकता पहले से युक्त लाइन है METHOD RESOURCEऔर PROTOCOL VERSIONऔर कम से कम host-header, इस तरह:

GET /someresource.html HTTP/1.1
Host: www.example.com

में होस्ट-हैडर पर MDN दस्तावेज़ीकरण वे वास्तव में इसे इस तरह वाक्यांश:

होस्ट हैडर फ़ील्ड को सभी HTTP / 1.1 अनुरोध संदेशों में भेजा जाना चाहिए। 400 (खराब अनुरोध) स्थिति कोड किसी भी HTTP / 1.1 अनुरोध संदेश पर भेजा जाएगा जिसमें होस्ट हेडर फ़ील्ड का अभाव है या जिसमें एक से अधिक हैं।

जैसा कि डारेल मिलर ने उल्लेख किया है, पूरा चश्मा RFC7230 में पाया जा सकता है ।


अच्छा उत्तर। आपने लिखा है "यह संभव है क्योंकि आपके वेबसर्वर में आप (और अगर मुझसे गलती नहीं है तो आपको) डिफ़ॉल्ट होस्ट होने के लिए एक vhost सेट करना होगा। यह डिफ़ॉल्ट vhost तब उपयोग किया जाता है जब भी होस्ट हेडर किसी भी कॉन्फ़िगर किए गए वर्चुअल से मेल नहीं खाता है। होस्ट करता है। " मैं RFC7230 में जांच करना चाहता था, लेकिन आपके वाक्यांश के करीब अर्थ vhostके virtual hostसाथ केवल 3 नज़दीकी घटनाएं नहीं मिलीं और 12 defaultपोर्ट के बारे में ज्यादातर के लिए ,
अलेक्सी मार्टीनोव

केवल उसी के बारे में होस्ट करें: "यदि नहीं, तो यदि होस्ट हेडर फ़ील्ड को गैर-रिक्त फ़ील्ड-मान के साथ आपूर्ति की जाती है, तो प्राधिकरण घटक होस्ट फ़ील्ड-मान के समान है।" - IMHO ही नहीं। क्या आप मुझे उस पर RFC की ओर इशारा कर सकते हैं?
बजे अलेक्सई मार्टियनोव

व्यावहारिक पक्ष: कुछ सर्वर पर मैं हेडर होस्ट = डोमेन नाम के साथ POST भेजता हूं और 200 (ओके) प्राप्त करता हूं, मैं बदले हुए होस्ट हेडर भेजता हूं और 404 (नहीं मिला)। इसका मतलब यह हो सकता है कि सर्वर ठीक से (पूरी तरह से by the book) कॉन्फ़िगर नहीं है?
बजे एलेक्सी मार्टिआनोव

टिप्पणी के रूप में संपादित नहीं किया जा सकता है: 2 में उद्धरण defaultखोज के द्वारा पाए गए शब्द के पास था ,Otherwise, the authority component is assigned the default name configured for the server
अलेक्सई मार्टिनियनोव

अजीब। tools.ietf.org/html/rfc7230virtual host में मेरी खोज से पाई गई सभी 3 घटनाएं हैं । लगता है कि आपकी खोज को कुछ और मिला। Appendix A. HTTP Version History
बजे अलेक्सई मार्टियनोव नोव

30

मैं हमेशा HTTP स्रोत के अर्थ और उद्देश्य को समझने की कोशिश करते हुए आधिकारिक स्रोत पर जाने की सलाह दूंगा।

अनुरोध में "होस्ट" हेडर फ़ील्ड होस्ट और पोर्ट
जानकारी यूआरआई से प्रदान करता है , मूल सर्वर को एक आईपी पते पर
कई
होस्ट नामों के लिए अनुरोधों की सेवा करते समय संसाधनों के बीच अंतर करने में सक्षम बनाता है ।

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

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