2017-04-01 20 views
15

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

उत्तर

27

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

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

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

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

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

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

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

आप MDN Documentation on the Host-Header पढ़ सकते हैं अधिक जानकारी के लिए, जो

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

जैसा कि डारेल मिलर द्वारा वर्णित है, पूर्ण चश्मा RFC7230 में पाया जा सकता है।

+2

बहुत बढ़िया जानकारी - धन्यवाद! – ineedhelp

1

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

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

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

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