System.Uri
है Host
, Authority
और DnsSafeHost
। MS कब Host
और DnsSafeHost
कैसे अलग हैं, इसका एक अच्छा उदाहरण देता है ।
मैं इसके लिए एक समान उदाहरण / स्पष्टीकरण चाहता हूं Host
और Authority
।
जवाबों:
हां ब्रैंडन बिल्कुल सही है, आम शब्दों में
प्राधिकरण = मेजबान का नाम + पोर्ट नहीं
और यदि URL प्रोटोकॉल एक डिफ़ॉल्ट पोर्ट का उपयोग कर रहा है, तो http URL के लिए पोर्ट 80 कहें, तो केवल उस मामले में प्राधिकरण = होस्ट नाम (पोर्ट संख्या 80 माना जाता है),
जबकि Host Name या तो Domain Name या IP Address होता है
उदाहरण:
http://www.example.com/
प्राधिकरण = www.example.com
होस्ट नाम = www.example.com
http://255.255.255.255:8080/
प्राधिकरण = 255.255.255.255:8080
होस्ट नाम = 255.255.255.255
User Information
हिस्सा याद किया ।
MSDN URI.Host पेज से।
प्राधिकरण संपत्ति के विपरीत, इस संपत्ति मूल्य में पोर्ट नंबर शामिल नहीं है।
प्रत्येक HTTP URL एक सामान्य URI के सिंटैक्स के अनुरूप है। URI जेनेरिक सिंटैक्स में पाँच घटकों का एक श्रेणीबद्ध अनुक्रम होता है:
URI = scheme:[//authority]path[?query][#fragment]
जहां प्राधिकरण घटक तीन उप-खंडों में विभाजित होता है:
authority = [userinfo@]host[:port]
ऐशे ही:
दो स्लैश (//) से पहले एक वैकल्पिक प्राधिकरण घटक, जिसमें शामिल हैं:
अधिक जानकारी के लिए, आप https://en.wikipedia.org/wiki/URL का संदर्भ ले सकते हैं ।
.NET में Uri वर्ग के लिए, प्राधिकरण में पोर्ट, होस्ट शामिल नहीं है, और न ही उपयोगकर्ता जानकारी शामिल है।
वैध यूआरआई के कुछ उदाहरण:
Uri u = new Uri("http://www.domain.com/path");
Assert.AreEqual("www.domain.com", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com", u.GetLeftPart(UriPartial.Authority));
u = new Uri("http://www.domain.com:8080/path");
Assert.AreEqual("www.domain.com:8080", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com:8080", u.GetLeftPart(UriPartial.Authority));
u = new Uri("http://user:password@host:555/path");
Assert.AreEqual("host:555", u.Authority);
Assert.AreEqual("host", u.Host);
Assert.AreEqual("http://user:password@host:555", u.GetLeftPart(UriPartial.Authority));
RFC3986 के अनुसार , धारा 3.2 में प्राधिकरण शामिल है
सिर्फ होस्ट और पोर्ट नंबर नहीं।
उदाहरण के लिए, निम्नलिखित एक मान्य URI है:
http://user:password@host:80/path
जिसमें प्राधिकरण है
user:password@host:80
प्रतीक पर (@) होस्ट और उपनिवेश से उपयोगकर्ता जानकारी को हटाता है (:) पोर्ट नंबर से होस्ट को परिसीमित करता है। उपयोगकर्ता जानकारी के भीतर, एक बृहदान्त्र (:) पासवर्ड से उपयोगकर्ता नाम का परिसीमन करता है। (हां, मुझे पता है कि पासवर्ड का भाग हटा दिया गया है। यह अभी भी वैकल्पिक रूप से समर्थित हो सकता है।)
यह एक प्राधिकरण के लिए पूर्ण कल्पना है। जाहिर है, उपयोगकर्ता जानकारी और पोर्ट नंबर अक्सर मौजूद नहीं होते हैं।
.NET में उरी वर्ग उपयोगकर्ता जानकारी चला जाता है जब प्राधिकरण जो बल्कि कष्टप्रद है, क्योंकि यह सही नहीं है लौटने। इसके बजाय आप उपयोगकर्ता जानकारी को UserInfo गुण में पा सकते हैं:
Uri.UserInfo
अन्य उत्तर तकनीकी रूप से यह कहना सही है कि .NET Uri वर्ग के लिए कि Uri.Authority और Uri.Host के बीच अंतर यह है कि होस्ट में पोर्ट नंबर नहीं होगा।
लेकिन कृपया जान लें कि प्राधिकरण को ठीक से परिभाषित नहीं किया गया है। इसका उपयोग .NET Uri वर्ग में किया जाता है क्योंकि इसमें उपयोगकर्ता जानकारी भी हो सकती है।
आपके द्वारा लिंक किए गए दस्तावेज़ के अनुसार, Authority
संपत्ति में पोर्ट नंबर शामिल होगा यदि यह उरी के डिफ़ॉल्ट पोर्ट के समान नहीं है, जबकि Host
संपत्ति केवल DNS होस्ट नाम या आईपी पता वापस करेगी।
मेरा मानना है कि इससे ज्यादा अंतर नहीं हैं।
प्राधिकरण में एक उपयोगकर्ता नाम और पासवर्ड भी शामिल हो सकता है, जैसे
बॉब: pwd@somewhere.example.com
अधिक सामान्यतः FTP URI के लिए उपयोग किया जाता है