2010-11-01 13 views
82

हाल ही में मैंने देखा काम कर कोड ब्लॉक इस तरह:यूआरआई दो स्लैश से शुरू ... वे कैसे व्यवहार करते हैं?

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

और आरएफसी 2396 (यूआरआइ सिंटेक्स) और आरएफसी के अनुसार 2616 (HTTP 1.1) इन यूआरआई दो स्लैश के साथ शुरू मान्य हैं, लेकिन दुर्भाग्य से RFC, वास्तव में उन्हें समझाओ मत।

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

उत्तर

84

जो संसाधन आप खोज रहे हैं वह RFC 3986 है।

अनुभाग 4.2 और धारा 5.4 देखें। उत्तरार्द्ध से हवाला देते हुए:

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

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

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

+0

तो मैं 'http: // a/b/c/g' को' // 'सभी के बिना'/ए/बी/सी'? –

+0

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

28

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

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

54

ये protocol relative URLs. हैं वे वर्तमान प्रोटोकॉल को रखते हुए, एक पते पर इंगित करते हैं।

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

अद्यतन: सरकारी प्रलेखन in RFC 3986:

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

+0

जानकर बहुत अच्छा लगा, लेकिन यह कैसे अनुरूप है करने के लिए: यह रूप में "मूल"

उदाहरण इलेक्ट्रॉन, PhoneGap, आदि जैसे उपकरण का उपयोग कर अनुप्रयोग पैक वेबसाइटों में समस्याएँ हो सकती हैं लोकप्रिय ब्राउज़रों के साथ। एक त्वरित खोज ने मुझे बताया कि यह आईई 6 के साथ काम नहीं करता है ... क्या यह एक HTML5 सुविधा है ?? –

+4

@Shane यह सभी ब्राउज़रों में काम करना चाहिए। क्या आपके पास दावा है कि यह आईई 6 में काम नहीं करता है? –

+4

बहुत यकीन है कि एक आईई 1 सुविधा है! –

2

यह केवल http नहीं या है कि के प्रति सचेत रहें https स्वतंत्र, लेकिन यह भी फ़ाइल, एफ़टीपी, आदि

इसका मतलब है कि अगर आप में सीधे .htm फ़ाइल को खोलने के अपने स्थानीयहोस्ट पर ब्राउज़र, ब्राउज़र // को फ़ाइल प्रोटोकॉल के रूप में हल करेगा और आपका पृष्ठ काम नहीं करेगा।

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

<script src="file://mywebsite.com/resource.js"></script> 
संबंधित मुद्दे