WHATWG URL मानक का उपयोग करके किसी भी URL को प्रोटोकॉल, होस्ट, पोर्ट, पथ, क्वेरी और फ़्रैगमेंट में पार्स करें। क्वेरी पैरामीटर्स को एक पठनीय तालिका में डिकोड किया जाता है।
URL को ब्राउज़र द्वारा देखे गए हर कंपोनेंट में विभाजित करें। एक URL चिपकाएँ और हर हिस्सा उसी WHATWG पार्सर का उपयोग करके निकाला जाता है जिसका आपका ब्राउज़र उपयोग करता है, ताकि परिणाम बिल्कुल वैसा ही मेल खाए जैसा URL वास्तव में व्याख्यायित होगा। क्वेरी पैरामीटर्स को एक तालिका में डिकोड किया जाता है।
अधिकांश URL उन स्लॉट्स में से केवल कुछ ही का उपयोग करते हैं, पर व्याकरण हमेशा सभी को अनुमति देता है। एक URL को पढ़ना मुख्य रूप से यह जानने का मामला है कि एक कंपोनेंट कहाँ रुकता है और अगला कहाँ शुरू होता है, जो डिलिमिटर्स ://, @, :, /, ? और # द्वारा तय किया जाता है।
कंपोनेंट दर कंपोनेंट
प्रोटोकॉल (स्कीम) यह पहचानता है कि संसाधन को कैसे लाया जाए — https:, mailto:, ftp:। ध्यान दें कि WHATWG पार्सर इस मान में अंतिम कोलन को शामिल करता है, जो स्ट्रिंग "https" से तुलना करने वाले लोगों को चौंकाता है।
उपयोगकर्ता नाम और पासवर्ड अप्रचलित userinfo अनुभाग हैं। ब्राउज़र अभी भी उन्हें पार्स करते हैं पर अनुरोधों से उन्हें हटा देते हैं और अक्सर चेतावनी देते हैं, क्योंकि किसी URL में क्रेडेंशियल्स एम्बेड करने से वे इतिहास, लॉग्स और रेफ़रर हेडर्स में लीक हो जाते हैं। किसी ऐसे URL में उनकी उपस्थिति को जिसे आपने नहीं लिखा, एक फ़िशिंग संकेत मानें।
होस्टनेम केवल डोमेन या IP एड्रेस है। होस्ट होस्टनेम के साथ पोर्ट जुड़ा होता है जब कोई गैर-डिफ़ॉल्ट पोर्ट मौजूद हो, जिस कारण यहाँ दोनों फ़ील्ड्स अक्सर समान दिखते हैं।
पोर्ट खाली होता है जब URL स्कीम का डिफ़ॉल्ट उपयोग करता है — https के लिए 443, http के लिए 80। पार्सर इसे सामान्यीकृत करता है: example.com:443/ एक खाली पोर्ट रिपोर्ट करता है क्योंकि 443 कोई जानकारी नहीं जोड़ता।
पथ पहले / से लेकर क्वेरी तक का सब कुछ है। यह एकमात्र कंपोनेंट है जो http(s) URL के लिए कभी खाली नहीं होता; एक नग्न ओरिजिन को / का पथ मिलता है।
क्वेरी स्ट्रिंग? से शुरू होती है और पैरामीटर्स लिए होती है। फ़्रैगमेंट# से शुरू होता है और वह एकमात्र हिस्सा है जो कभी सर्वर को नहीं भेजा जाता — यह पूरी तरह क्लाइंट-साइड संभाला जाता है, जिस कारण सिंगल-पेज ऐप्स ने इसे राउटिंग के लिए उपयोग किया था और जिस कारण फ़्रैगमेंट में कोई एक्सेस टोकन सर्वर लॉग्स से बाहर रहता है।
ओरिजिन स्कीम, होस्ट और पोर्ट का सुरक्षा-प्रासंगिक त्रिक है। दो URL तभी ओरिजिन साझा करते हैं जब तीनों मेल खाते हों, और यही वह है जिस पर समान-मूल नीति और CORS निर्णय आधारित हैं।
पार्सर कड़ा क्यों है
WHATWG URL पार्सर केवल निरपेक्ष URL स्वीकार करता है। example.com/page में कोई स्कीम नहीं है, इसलिए इसे अकेले पार्स नहीं किया जा सकता — पार्सर के पास कोई तरीका नहीं है कि पता चले कि आपका आशय example.com/page से था या किसी सापेक्ष पथ से। वास्तविक कोड सापेक्ष संदर्भों को किसी बेस URL के विरुद्ध हल करता है; यह उपकरण जानबूझकर निरपेक्ष रूप की माँग करता है ताकि जो आप देखें वह असंदिग्ध हो।
सामान्यीकरण जो आपको दिखेगा
पार्सर कच्ची स्ट्रिंग वापस नहीं देता। यह स्कीम और होस्ट को लघुकर (lowercase) करता है, पथ में . और .. खंडों को हल करता है, डिफ़ॉल्ट पोर्ट्स हटाता है, और अंतरराष्ट्रीयकृत डोमेन नामों को उनके Punycode रूप में बदलता है, ताकि münchen.de एक होस्टनेम xn--mnchen-3ya.de रिपोर्ट करे। यह एक विशेषता है: यह URL को वैसा दिखाता है जैसा नेटवर्क स्टैक वास्तव में उसे मानेगा, न कि जैसा टाइप किया गया था।
दोहराए गए पैरामीटर्स
एक क्वेरी स्ट्रिंग वैध रूप से किसी कुंजी को दोहरा सकती है, जैसे ?tag=a&tag=b में। कोई विनिर्देश नहीं बताता कि इसका क्या अर्थ है — कुछ फ्रेमवर्क पहला मान लेते हैं, कुछ अंतिम, कुछ एक सरणी एकत्र करते हैं। यहाँ की तालिका हर घटना को क्रम में सूचीबद्ध करती है ताकि आप ठीक वही देख सकें जो भेजा गया था, न कि एक संक्षिप्त दृश्य।
FAQs
पोर्ट फ़ील्ड खाली क्यों है?
क्योंकि URL अपनी स्कीम के लिए डिफ़ॉल्ट पोर्ट का उपयोग करता है। WHATWG पार्सर https के लिए 443 और http के लिए 80 को छोड़ देता है, क्योंकि उन्हें शामिल करने से कोई जानकारी नहीं बढ़ती और ओरिजिन तुलनाएँ टूट जाएँगी।
प्रोटोकॉल में कोलन क्यों शामिल है?
यही URL मानक परिभाषित करता है। प्रोटोकॉल प्रॉपर्टी 'https:' है न कि 'https'। यदि आप किसी नग्न स्कीम नाम से तुलना करते हैं, तो अंतिम कोलन का हिसाब रखना याद रखें।
होस्ट और होस्टनेम के बीच क्या अंतर है?
होस्टनेम केवल डोमेन है। होस्ट में पोर्ट शामिल होता है यदि कोई मौजूद हो। https://example.com:8443/ के लिए होस्टनेम example.com है और होस्ट example.com:8443 है।
मैं सापेक्ष URL क्यों पार्स नहीं कर सकता?
/about या ../img.png जैसा सापेक्ष संदर्भ केवल किसी बेस URL के विरुद्ध ही अर्थ रखता है। पार्सर को एक स्कीम के साथ निरपेक्ष URL की आवश्यकता होती है ताकि परिणाम असंदिग्ध हो।
क्या फ़्रैगमेंट सर्वर को भेजा जाता है?
नहीं। # के बाद वाला भाग कभी किसी HTTP अनुरोध में प्रेषित नहीं किया जाता। यह पूरी तरह ब्राउज़र में हल किया जाता है, जिस कारण OAuth implicit फ़्लोज़ ने टोकन को सर्वर लॉग्स से दूर रखने के लिए इसका उपयोग किया।
मेरा Unicode डोमेन बदला क्यों?
अंतरराष्ट्रीयकृत डोमेन नामों को Punycode में बदला जाता है, जो ASCII रूप DNS वास्तव में उपयोग करता है। münchen.de बन जाता है xn--mnchen-3ya.de। यह वही रूपांतरण है जो आपका ब्राउज़र अनुरोध करने से पहले करता है।