URI दो स्लैश से शुरू होता है ... वे कैसे व्यवहार करते हैं?


92

हाल ही में मैंने इस तरह काम करने वाले कोड-ब्लॉक देखे :

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

और RFC 2396 (URI Syntax) और RFC 2616 (HTTP 1.1) के अनुसार ये URI दो स्लैश से शुरू होते हैं, लेकिन दुर्भाग्य से RFC वास्तव में इन्हें नहीं समझाता।

क्या कोई मुझे ऐसे संसाधन की ओर संकेत कर सकता है जो यह बताता है कि ब्राउज़र इन यूआरआई को कैसे संसाधित / करेगा / करेगा?

जवाबों:


86

आप जिस संसाधन की तलाश कर रहे हैं, वह RFC 3986 है

धारा 4.2 और धारा 5.4 देखें। बाद से उद्धृत करना:

संदर्भ संकल्प उदाहरण

एक अच्छी तरह से परिभाषित आधार URI के साथ एक प्रतिनिधित्व के भीतर:

    http://a/b/c/d;p?q

एक रिश्तेदार संदर्भ अपने लक्ष्य यूआरआई में बदल जाता है:

  "g:h"           =  "g:h"
  "g"             =  "http://a/b/c/g"
  "./g"           =  "http://a/b/c/g"
  "g/"            =  "http://a/b/c/g/"
  "/g"            =  "http://a/g"
  "//g"           =  "http://g"
  "?y"            =  "http://a/b/c/d;p?y"
  "g?y"           =  "http://a/b/c/g?y"
  "#s"            =  "http://a/b/c/d;p?q#s"
  "g#s"           =  "http://a/b/c/g#s"
  "g?y#s"         =  "http://a/b/c/g?y#s"
  ";x"            =  "http://a/b/c/;x"
  "g;x"           =  "http://a/b/c/g;x"
  "g;x?y#s"       =  "http://a/b/c/g;x?y#s"
  ""              =  "http://a/b/c/d;p?q"
  "."             =  "http://a/b/c/"
  "./"            =  "http://a/b/c/"
  ".."            =  "http://a/b/"
  "../"           =  "http://a/b/"
  "../g"          =  "http://a/b/g"
  "../.."         =  "http://a/"
  "../../"        =  "http://a/"
  "../../g"       =  "http://a/g"

इसका मतलब है कि जब आधार यूआरआई है http://a/b/c/d;p?qऔर आप उपयोग करते हैं //g, तो सापेक्ष संदर्भ में बदल जाता है http://g


4
तो यह http या https को निर्धारित करने के लिए जावास्क्रिप्ट का उपयोग करने का एक समाधान हो सकता है इस तरह से जो कुछ भी है वह काम करेगा
Ibu

चूंकि आपको मूल स्तर तक पहुंचने की आवश्यकता है, इसलिए उपयोग करें ../g- यह वर्तमान प्रोटोकॉल का उपयोग करेगा और ले जाएगा http://a/b/c/g
बोरिस एस

यह एक नौसिखिया सवाल हो सकता है, लेकिन यह आधार यूआरआई कहां से आता है? ब्राउज़र यूआरएल बार? सर्वर? HTML पेज में एक टैग?
कोडरत्चेत

1
@thenaglecode: उत्तर है, यह निर्भर करता है। XML / XHTML / HTML5 में आप इसे किसी भी तत्व पर स्पष्ट रूपxml:base से सेट करने के लिए उपयोग कर सकते हैं । HTML में डिफ़ॉल्ट रूप से आधार URI पृष्ठ का एक ही URI होता है (लेकिन CSS फ़ाइल के अंदर, आधार URI CSS uri के सापेक्ष होता है, जिसमें HTML शामिल नहीं है , लेकिन पुराने IE इसे HTML के सापेक्ष बनाता है)। अन्य प्रोटोकॉल और भाषाओं में, यह अलग हो सकता है (XSLT में, यह वर्तमान आइटम पर निर्भर है, उदाहरण के लिए)। यह भी देखें <html:base>
हाबिल

1
महत्वपूर्ण - परिणाम हमेशा नहीं होता है http! यह पृष्ठ संदर्भ के प्रोटोकॉल पर निर्भर करता है। यदि संदर्भ के तहत लोड किया गया था http://a/b/c/d;p?q, तो //gवास्तव में हल होता है http://g। लेकिन अगर पेज को लोड किया गया था http://a/b/c/d;p?qतो परिणाम होगा https://g। और अन्य प्रोटोकॉल के बारे में भी मत भूलना जैसे file://(पृष्ठ डिस्क से लोड किया गया है) - जो निश्चित रूप से आपको बहुत सिरदर्द देगा।
एंड्री टेरस्कस

62

ये प्रोटोकॉल सापेक्ष URL हैं। वे वर्तमान प्रोटोकॉल को ध्यान में रखते हुए एक पते की ओर इशारा करते हैं।

इस टिप्पणी अक्सर "मिश्रित सामग्री" समस्या (एक आईई चेतावनी संदेश के बारे में शिकायत से बचने के लिए प्रयोग किया जाता है httpऔर httpsसंसाधनों ही HTTPS पृष्ठ पर)।

अद्यतन: RFC 3986 में आधिकारिक दस्तावेज :

एक रिश्तेदार संदर्भ जो दो स्लैश पात्रों से शुरू होता है, उसे नेटवर्क-पथ संदर्भ कहा जाता है; ऐसे संदर्भों का उपयोग शायद ही कभी किया जाता है। एक एकल स्लेश चरित्र के साथ शुरू होने वाले सापेक्ष संदर्भ को एक पूर्ण-पथ संदर्भ कहा जाता है। एक रिश्तेदार संदर्भ जो एक स्लैश चरित्र से शुरू नहीं होता है, उसे एक रिश्तेदार-पथ संदर्भ कहा जाता है।


यह जानने के लिए बहुत अच्छा है, लेकिन लोकप्रिय ब्राउज़रों के साथ यह कैसे अनुपालन है। एक त्वरित खोज ने मुझे बताया कि यह IE6 के साथ काम नहीं करता है ... क्या यह एचटीएमएल 5 फीचर है ??
शेन एन

4
@ इसके बाद सभी ब्राउज़र में काम करना चाहिए। क्या आपके पास IE6 में काम नहीं करने का दावा करने वाला लिंक है?
पेका

4
बहुत यकीन है कि एक IE1 सुविधा है!
जॉन हैना

प्रोटोकॉल रिश्तेदार का उल्लेख करने के लिए प्लस
तौफीक खलीफा

30

वे प्रोटोकॉल स्वतंत्र urls हैं। यदि वेब पेज को https पर परोसा जाता है तो अनुरोध https, यदि http तो http का उपयोग करता है।

लगता है पॉल आयरिश ने अपने बॉयलरप्लेट कोड में इसे शामिल करके उन्हें लोकप्रिय बना दिया है।


1

ज्ञात हो कि यह न केवल http या https स्वतंत्र है, बल्कि फ़ाइल , ftp , आदि भी है ।

इसका मतलब है कि अगर आप स्थानीय ब्राउज़र पर सीधे अपने .htm फ़ाइल को खोलते हैं , तो ब्राउज़र फ़ाइल प्रोटोकॉल के रूप में // का समाधान करेगा और आपका पेज काम नहीं करेगा। यह इलेक्ट्रॉन, फोनगैप, आदि जैसे टूल का उपयोग करके पैक्ड वेबसाइटों में "देशी" ऐप के रूप में समस्याएं पैदा कर सकता है।

उदाहरण:

<script src="//mywebsite.com/resource.js"></script>

सेवा

<script src="file://mywebsite.com/resource.js"></script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.