वेब सर्वर कैसे जानते हैं कि क्या आप सीधे आईपी एड्रेस एक्सेस का उपयोग कर रहे हैं?


64

कुछ वेब सर्वर, जब अपने आईपी पते का उपयोग करते हुए पहुंचते हैं, तो एक त्रुटि लौटाते हैं जो सीधे आईपी पते तक पहुंचने की अनुमति नहीं है।

मैं कुछ समय से सोच रहा हूं कि यह कैसे काम करता है। मेरा मतलब है, क्या ब्राउज़र हमेशा आईपी पते को हल नहीं करता है और इससे कनेक्ट होता है? क्या "डायरेक्ट आईपी एड्रेस एक्सेस" सिर्फ डीएनएस लंघन नहीं है? रिमोट सर्वर भी कैसे जानता है कि आपने DNS को छोड़ दिया है?


2
जैसा कि मुझे याद है, उसने वास्तव में http प्रोटोकॉल में बहुत ही वास्तविक होस्ट के लिए वर्चुअल सर्वर प्रदान करने के लिए जो कुछ पूछा था , वह बहुत पहले ही जुड़ गया था।
JDługosz

3
यह मूल रूप से एक ही प्रक्रिया है जो एकल सर्वर को विभिन्न वर्चुअल होस्ट के बीच अंतर करने की अनुमति देती है। वास्तविक सर्वर अपने वर्चुअल होस्ट में से एक के लिए एक URL मैप करता है। कई सर्वरों में बिना डिजाइन वाले URL के लिए फ़ॉलबैक नहीं होता है, या तो डिज़ाइन या डिफ़ॉल्ट रूप से।
मन्नंगो

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

इस प्रकार के प्रश्नों का उत्तर आमतौर पर है, क्योंकि आपने उन्हें बताया था
थॉमस

जवाबों:


91

यह कैसे पता है के अपने सवाल का जवाब देने के लिए , यह आपके ब्राउज़र सर्वर क्या भेजता है के साथ क्या करना है।

आप सही हैं कि सिस्टम हमेशा एक आईपी पते पर इसे हल करता है, लेकिन ब्राउज़र उस URL को भेजता है जिसे आपने HTTP हेडर में एक्सेस करने का प्रयास किया था।

यहाँ एक नमूना शीर्ष लेख है जो मैंने ऑनलाइन पाया, यह देखने के लिए संशोधित किया गया है कि आपने Windows पर फ़ायरफ़ॉक्स का उपयोग किया है और apple.comपता बार में टाइप किया है:

GET / HTTP/1.1
Host: apple.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

यदि आपका IP पता उपयोग किया जाता है तो हेडर कैसा दिखेगा:

GET / HTTP/1.1
Host: 17.142.160.59
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

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

क्यों? क्योंकि एक ही आईपी पते वाले वेब सर्वर कई साइटों को होस्ट कर सकते हैं और प्रत्येक के लिए अलग-अलग पृष्ठ दे सकते हैं। यह पता नहीं लगा सकता कि कौन कौन से पेज को आईपी पते से चाहता है क्योंकि वे सभी एक ही हैं - लेकिन यह उन्हें HTTP हेडर द्वारा अलग कर सकता है।


7
आह, अब और अधिक समझ में आता है! इसलिए मूल रूप से, ब्राउज़र आईपी या डोमेन या आईपी के साथ हेडर भेजता है, और साइट उस पर अपनी धारणा बनाती है। तो क्या वास्तव में, इन प्रतिबंधों को दरकिनार करना आसान है?
जोसेफ ए।

7
ऐसा नहीं है कि यह एक प्रतिबंध है कि आप बाईपास कर रहे हैं, यह सिर्फ इतना है कि आप गेंद नहीं खेल रहे हैं और आप कुछ अजीब परिणाम प्राप्त करने जा रहे हैं।
Ijjunct

यदि आप एक प्रॉक्सी का उपयोग कर रहे हैं तो ये HTTP अनुरोध आपको क्या मिलेगा। प्रॉक्सी के बिना, hostहेडर में सूचना आती है । इस उदाहरण को देखें ।
0xFE

2
bytec0de: इसका दूसरा हिस्सा यह है कि वेब सर्वर कॉन्फ़िगरेशन अक्सर होस्ट नाम के आधार पर सेट किया जाएगा। IP पैकेट IP पता निर्दिष्ट करता है, TCP खंड पोर्ट संख्या निर्दिष्ट करता है, और HTTP शीर्ष लेख होस्टनाम निर्दिष्ट करता है। इसलिए आमतौर पर सर्वर को यह कहने के लिए कॉन्फ़िगर किया जाता है "यदि क्लाइंट / ब्राउज़र example.com के लिए पूछता है, तो उन्हें यह दें।" उन्हें आईपी पते या वाइल्डकार्ड (किसी भी चीज़ पर प्रतिक्रिया) का जवाब देने के लिए सेट किया जा सकता है, लेकिन बहुत से लोग सिर्फ उदाहरणों की नकल करते हैं, और कई पूर्व-मौजूदा उदाहरण ब्राउज़र द्वारा आपूर्ति किए गए डोमेन नाम पर आधारित होते हैं।
TOOGAM

14
@ bytec0de यह प्रतिबंध नहीं है । यह सही फोन नंबर का उपयोग करना अधिक पसंद है, लेकिन गलत विस्तार - आपने सही भवन कहा, लेकिन सही व्यक्ति नहीं। और इसके परिचय का कारण फोन के साथ भी बहुत अधिक है - यह आपको एक ही आईपी पते (और टीसीपी पोर्ट) पर कई अलग-अलग साइटों की मेजबानी करने की अनुमति देता है। उदाहरण के लिए, हमारे विकास सर्वर ने एक ही समय में सैकड़ों अलग-अलग वेब साइटों की मेजबानी की, और बहुत सारे वेब होस्टिंग समाधान एक ही दृष्टिकोण का उपयोग करते हैं ("एक डोमेन पंजीकृत करें, इसे हमारे आईपी पते पर इंगित करें, हम बाकी का ध्यान रखेंगे") ।
लुअन

21

HTTP 1.1 प्रोटोकॉल के साथ (पूर्व HTTP 1.0 संस्करण काफी समय से अप्रचलित है, इसलिए किसी ब्राउज़र के हालिया संस्करण द्वारा उपयोग किए जाने की संभावना नहीं है), hostहेडर पेश किया गया था। HTTP 1.1 के लिए यह एक आवश्यक हेडर लाइन है जिसे ब्राउज़र द्वारा जारी किया जाना चाहिए । डोमेन नाम उस लाइन में ब्राउज़र द्वारा शामिल किया गया है, जैसे Host: example.com। तो वेब सर्वर को पता होता है कि ब्राउज़र किस वेब साइट पर उस लाइन से एक्सेस करना चाहता है। चूंकि एक वेबसर्वर दर्जनों वेबसाइटों का समर्थन कर रहा है, इसलिए यह निर्धारित करना महत्वपूर्ण है कि अनुरोधित पृष्ठ किस वेब साइट पर रहता है। उदाहरण के लिए, ब्राउज़र उदाहरण के लिए साइट पर होम पेज को एक्सेस करना चाहता है। यह सर्वर से कनेक्ट होने पर सर्वर को निम्न लाइन जारी करता है:

GET / HTTP/1.1

वह लाइन उस ब्राउज़र को निर्दिष्ट करती है जो वेबसाइट के लिए रूट डॉक्यूमेंट, अर्थात, "/" प्राप्त करना चाहता है। यदि आप एक्सेस करना चाहते हैं /somedir/testpage.html, GET /somedir/testpage.htmlतो "गेट" लाइन में होगा। लाइन नीचे लाइन द्वारा पीछा किया जाएगा:

Host: example.com

इसलिए यदि वेब सर्वर वेबसाइट्स example.com, someothersite.com, yetanothersite.org आदि का समर्थन कर रहा है, तो यह जानता है कि उसे example.com के लिए मुख्य पृष्ठ को वापस करना चाहिए। यदि उसे वह लाइन नहीं मिलती है, या उसके पास एक डोमेन नाम Hostलाइन में सूचीबद्ध नहीं है, तो यह नहीं पता है कि किस वेबसाइट का होम पेज वापस किया जाना चाहिए। इसलिए, यह एक त्रुटि संदेश दे सकता है, इसके बजाय, या सर्वर के लिए "डिफ़ॉल्ट" साइट के लिए होम पेज वापस कर सकता है।

आप टेलनेट प्रोटोकॉल का उपयोग करके एक ब्राउज़र कमांड जारी कर सकते हैं , उदाहरण के लिए, telnet example.com 80एक लिनक्स शेल प्रॉम्प्ट या एक ऐप्पल ओएस एक्स टर्मिनल विंडो से, डिफ़ॉल्ट HTTP पोर्ट से कनेक्ट करने के लिए, पोर्ट 80 - चरणों के लिए PuTTY का उपयोग करके वेबसाइट पर परीक्षण एक्सेस देखें एक विंडोज सिस्टम पर PuTTY के साथ ऐसा करने के लिए।


3
बस एक नोट: होस्ट हेडर का उपयोग HTTP 1.0 में भी किया गया था, बस इसकी आवश्यकता नहीं थी । HTTP 1.1 ने क्षेत्र को अनिवार्य बना दिया। व्यवहार में, कई एचटीटीपी 1.0 सर्वर बस काम नहीं करते थे यदि ब्राउज़र होस्ट हेडर (ऊपर उल्लिखित सभी कारणों के लिए) नहीं भेजता था, तो अधिकांश ब्राउज़र इसे वैसे भी भेजते थे।
लुअन

6

यह Host:HTTP हेडर के कारण है । यह एक ही आईपी पते पर कई साइटों की मेजबानी के लिए काफी उपयोगी है। उदाहरण के लिए, http://www.k7dxs.net/ और http://www.philipgrimes.com/ दोनों एक ही आईपी पते पर हैं। हालांकि, Host:हेडर के कारण, वे दो अलग-अलग साइट दिखा सकते हैं।

HTTPS के लिए, जैसा कि @Toothbrush ने बताया, वे TLS सर्वर नेम इंडिकेशन का उपयोग करते हैं क्योंकि होस्ट हेडर एन्क्रिप्टेड अनुरोध का हिस्सा है, और सर्वर को यह पता नहीं होता है कि इसके बिना कौन सा सर्टिफिकेट देना है।

मजेदार प्रयोग: फ़ायरफ़ॉक्स के लिए टैम्पर डेटा प्राप्त करें (मैं क्रोम के लिए एक समान नहीं मिल पाया है) और छेड़छाड़ शुरू कर देता हूं। Http://slipstation.com/ खोलें और http://www.zombo.com/Host: होने के अनुरोध में हेडर को संपादित करें । आपको संभवतः एक परिचित वेबसाइट दिखाई देगी जहां कुछ भी संभव है।


दरअसल, वो साइट्स Server Name Indication का इस्तेमाल करती हैं । यह बताने का कोई तरीका नहीं है कि एसएनटीआई के बिना एचटीटीपीएस पर एक ही सर्वर पर दोनों साइटों को होस्ट करने के लिए कौन सी साइट प्रदर्शित की जाए क्योंकि सर्वर को पता नहीं है कि किस प्रमाण पत्र का उपयोग करना है।
टूथब्रश

ओह दिलचस्प। क्या मेरा प्रयोग अभी भी चलेगा?
डंकन एक्स सिम्पसन

हां, अगर आपको दो साइटें मिलें जो HTTP पर एक ही आईपी पते पर होस्ट की जाती हैं।
टूथब्रश

लेकिन HTTPS वह नहीं है जो मैं पूछ रहा था।
डंकन एक्स सिम्पसन

नहीं, यह HTTPS पर काम नहीं करना चाहिए। यदि ऐसा होता है, तो वेब सर्वर में सुरक्षा भेद्यता है।
टूथब्रश

5

वेब सर्वर को केवल किसी विशेष डोमेन या उपडोमेन से कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर किया जा सकता है। यह कई डोमेन को होस्ट कर सकता है।

जब एक प्रत्यक्ष आईपी पते का उपयोग किया जाता है तो वेब सर्वर क्या करता है, यह विन्यास योग्य है। अपाचे के मामले में, यह डिफ़ॉल्ट रूप से सक्षम साइटों में से पहले नामित vhost पर जाएगा, जो कि अल्फा-संख्यात्मक रूप से क्रमबद्ध हैं।

यह त्वरित खोज के बाद अपाचे प्रलेखन का सबसे प्रासंगिक हिस्सा है जो मुझे मिला है:

https://httpd.apache.org/docs/current/vhosts/name-based.html

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