जब एक HTTP क्लाइंट एक भेजता है GET अनुरोध, गंतव्य होस्टनाम है आमतौर पर नहीं अनुरोधित URI में। यानी भेजने के बजाय
GET http://www.gstatic.com/generate_204 HTTP/1.1
एक HTTP 1.1 क्लाइंट भेजता है:
GET /generate_204 HTTP/1.1
Host: www.gstatic.com
चूंकि क्लाइंट "जानता है" कि इसे आईपी पते के लिए DNS नाम "www.gstatic.com" को हल करने की आवश्यकता है, और उस आईपी पते पर HTTP अनुरोध भेजें, यह वास्तव में hostname को शामिल करने की आवश्यकता नहीं है फिर अनुरोधित मार्ग के हिस्से के रूप में। Host शीर्ष लेख मूल रूप से अनुरोधित होस्टनाम के सर्वर का संकेत है।
ध्यान दें कि उपरोक्त शब्दार्थ द्वारा कवर किया गया है आरएफसी 7230, धारा 5.3 । और वहाँ, यह कर देता है अनुरोधित / लक्ष्य संसाधन का "पूर्ण रूप" बताएं सकता है स्कीमा और होस्टनाम शामिल करें; यह "मूल रूप" है जो मैंने ऊपर वर्णित किया है। यदि आपका मूल / गंतव्य सर्वर "पूर्ण रूप" के लिए "400 बैड रिक्वेस्ट" लौटाता है जो आपके प्रॉक्सी का उपयोग कर रहा है, यह या तो सुझाव देता है ए) वह सर्वर "पूर्ण रूप" का समर्थन नहीं करता है, या ख) कुछ और गलत है (एक लापता है Host अनुरोध हैडर;)।
इसका अर्थ है कि आपका HTTP प्रॉक्सी वास्तव में HTTP अनुरोध (HTTP क्लाइंट के लिए) की पहली पंक्ति में होने वाले गंतव्य होस्टनाम पर निर्भर नहीं होना चाहिए सकता है अनुरोधित / लक्ष्य संसाधन के "मूल रूप" का उपयोग करें; इसके बजाय, आपके प्रॉक्सी को ढूंढना चाहिए Host हेडर, यदि आपको उस जानकारी को जानने की आवश्यकता है। और से बचने के लिए 400 Bad Request मूल सर्वर से, मेरा सुझाव है कि आपका प्रॉक्सी भेजें जैसे :
GET /generate_204 HTTP/1.1
Host: www.gstatic.com
के शब्दार्थ के लिए CONNECT विधि, देखें आरएफसी 7231, धारा 4.3.6 । वहाँ, हम देखते हैं कि अनुरोधित संसाधन जरूर होस्टनाम और पोर्ट से मिलकर। कोई भी 2xx गंतव्य सर्वर से प्रतिक्रिया सफलता इंगित करती है; कोई अन्य प्रतिक्रिया कोड इंगित करता है कि अनुरोधित "सुरंग" स्थापित नहीं है। बाकी RFC मामलों और व्यवहारों के लिए बाकी RFC पढ़ने लायक है।
उम्मीद है की यह मदद करेगा!
CONNECTतरीका।