क्या URL में प्रोटोकॉल को इनहेरिट करने के लिए अग्रणी डबल स्लैश का उपयोग करने के लिए कोई नकारात्मक पहलू है? अर्थात src = "// domain.com"


148

मेरे पास एक स्टाइलशीट है जो एक बाहरी डोमेन से छवियों को लोड करता है और मुझे वर्तमान URL के आधार पर अन्य पृष्ठों से सुरक्षित ऑर्डर पृष्ठों और http: // से https: // लोड करने की आवश्यकता है। मैंने पाया कि डबल स्लैश के साथ URL शुरू करना वर्तमान प्रोटोकॉल को विरासत में मिला है। क्या सभी ब्राउज़र इस तकनीक का समर्थन करते हैं?

html पूर्व:

<img src="//cdn.domain.com/logo.png" />

सीएसएस पूर्व:

.class { background: url(//cdn.domain.com/logo.png); }

1
क्या यह साइट को धीमा करता है ???
TheBlackBenzKid

2
ऐसा कोई कारण नहीं है कि इसके प्रदर्शन पर कोई प्रभाव न पड़े, सिवाय उन मामलों के जिनमें मेडर ने अपने उत्तर में नीचे सूचीबद्ध किया है।
राब वोल्क

लगता है जैसे मैं किसी चीज़ पर था। कुछ महीने पहले, Google डेवलपर उनकी मेजबानी की जावास्क्रिप्ट पुस्तकालयों पृष्ठ पर इस सम्मेलन का उपयोग शुरू किया developers.google.com/speed/libraries/devguide
रोब वोल्क

10
क्या होगा यदि ऐसी HTML फ़ाइल स्थानीय रूप से लोड की जाती है (सीधे ब्राउज़र से खोली जाती है)? फ़ायरफ़ॉक्स (इस मामले में 28) जैसा दिखता है, फिर दूरस्थ संसाधन को लोड नहीं करता है। समझ में आता है, क्योंकि तब HTTP मूल प्रोटोकॉल नहीं है। लेकिन यह एक नुकसान होगा, मेरी राय में।
डॉ। जन-फिलिप गेर्के

जवाबों:


86

यदि ब्राउज़र RFC 1808 धारा 4 , RFC 2396 खंड 5.2 , या RFC 3986 खंड 5.2 का समर्थन करता है , तो यह वास्तव में "//" से शुरू होने वाले संदर्भों के लिए पृष्ठ URL की योजना का उपयोग करेगा।


8
क्या यह सभी प्रमुख ब्राउज़रों पर समर्थित है? (IE7, IE8, FF, क्रोम, सफारी)
Rob Volk

22
यह देखते हुए कि इसका वर्णन करने वाला पहला RFC, RFC 1808, 15 साल पहले लिखा गया था, और URL संदर्भ वेबसाइट की कार्यक्षमता के लिए महत्वपूर्ण हैं, मुझे लगता है कि यह कहना सुरक्षित है कि सभी प्रमुख ब्राउज़र अब तक इसका समर्थन करते हैं। लेकिन निश्चित रूप से जानने का एकमात्र तरीका यह है कि आप इसे स्वयं आज़माएँ और देखें कि क्या होता है।
रेमी लेबेऊ

2
यह प्रश्न इसी तरह का प्रश्न पूछने वाले किसी व्यक्ति से जुड़ा हुआ था, और मैंने इसे आरएफसी 1630 में एक साल पहले पाया था (अलग-अलग तरीके से, लेकिन फिर भी प्रश्न में प्रारूप की अनुमति देता है)। यह अच्छी तरह से एक रूप में या किसी अन्य दस्तावेज़ में हो सकता है ftp://info.cern.ch/pub/www/doc/http-spec.txtजो 1991 में शुरू हुआ करता था, किसी के पास एक संग्रह प्रति होनी चाहिए।
जॉन हैना

4
"2014.12.17: अब जब एसएसएल को सभी के लिए प्रोत्साहित किया जाता है और प्रदर्शन की चिंता नहीं होती है, तो यह तकनीक अब एक विरोधी पैटर्न है। यदि आपको जिस परिसंपत्ति की जरूरत है वह एसएसएल पर उपलब्ध है, तो हमेशा https: // संपत्ति का उपयोग करें।" ( stackoverflow.com/a/27999789 से उद्धृत )
joonas.fi

@ joonas.fi यह तर्क निंदनीय है। एसएसएल में अभी भी प्रदर्शन प्रभाव पड़ता है और बड़ी संख्या में अनुप्रयोगों में अनावश्यक है। मैं इसका उपयोग करना पसंद करता हूं, निश्चित रूप से, लेकिन मैं नहीं चाहता कि यह लागू हो, उदाहरण के लिए, कोड जिसे मैं तैनात करता हूं।
ओथियस

64

जब linkया पर इस्तेमाल किया जाता है @import, IE7 / IE8 प्रति दो बार फाइल डाउनलोड करेगा http://paulirish.com/2010/the-protocol-relative-url/

2014 से अपडेट:

अब जब एसएसएल को सभी के लिए प्रोत्साहित किया जाता है और प्रदर्शन की चिंता नहीं होती है , तो यह तकनीक अब एक विरोधी पैटर्न है । यदि आपके पास आवश्यक संपत्ति एसएसएल पर उपलब्ध है, तो हमेशाhttps:// परिसंपत्ति का उपयोग करें ।


18
IE9, FWIW में तय किया गया।
एरियलॉ

@ EricLaw उस IE9 में तय किया गया है जो रेंडरिंग मोड के बावजूद या केवल स्टैंडर्ड मोड में है और अभी भी क्वर्क्स मोड में टूटा हुआ है?
स्क्यूलिफ़े

मैं लगभग सकारात्मक हूं कि यह लुकहेड स्कैनर में सभी मोड में तय किया गया था। कहीं देखा है क्या?
EricLaw

एसएसएल निश्चित रूप से करता है एक प्रदर्शन प्रभाव पड़ता है। EFF सर्वर-सर्वर इंटरफेस नहीं लिखता है, और उस साइट में बहुत कम तकनीकी विशेषज्ञ हैं। इसके अलावा, यह एक विरोधी प्रतिमान है कि वेब-साइट का विक्रेता इस तरह के प्रतिबंधों को लागू करेगा। इस प्रकार, लोग CSS लिखते हैं और जावास्क्रिप्ट एप्लिकेशन को प्रोटोकॉल प्रश्न पर बैंक नहीं करना चाहिए।
ओथियस

63

यदि आपका URL किसी वेब पेज के संदर्भ के बाहर देखा जाता है, तो एक नकारात्मक पक्ष यह होता है। उदाहरण के लिए, ईमेल क्लाइंट (कहते हैं, आउटलुक) में बैठे ईमेल संदेश का प्रभावी रूप से कोई URL नहीं होता है, और जब आप प्रोटोकॉल-रिलेटिव URL वाले संदेश को देख रहे होते हैं, तो कोई स्पष्ट प्रोटोकॉल संदर्भ नहीं होता है (संदेश स्वयं स्वतंत्र होता है इस प्रोटोकॉल को लाने के लिए, चाहे वह POP3 हो, IMAP, Exchange, uucp या जो भी हो) इसलिए URL के सापेक्ष कोई प्रोटोकॉल नहीं है। मैंने ईमेल क्लाइंट के साथ संगतता की जांच नहीं की है कि वे क्या करते हैं जब एक लापता प्रोटोकॉल हैंडलर के साथ प्रस्तुत किया जाता है - मैं अनुमान लगा रहा हूं कि सबसे अधिक http के साथ एक अनुमान लगेगा। Apple मेल आपको बिना प्रोटोकॉल के URL दर्ज करने से मना करता है। यह उसी तरह से अनुरूप है कि समान रूप से लापता संदर्भ के कारण रिश्तेदार URL ईमेल में काम नहीं करते हैं।

इसी तरह की समस्याएं अन्य गैर-HTTP संदर्भों में हो सकती हैं जैसे कि ट्वीट, एसएमएस संदेश, शब्द दस्तावेज़ आदि।

अधिक सामान्य व्याख्या यह है कि अनाम प्रोटोकॉल URL अलगाव में काम नहीं कर सकते हैं; वहाँ चाहिए किसी प्रासंगिक संदर्भ हो। एक विशिष्ट वेब पेज में इस तरह से स्क्रिप्ट लाइब्रेरी में खींचना ठीक है, लेकिन किसी भी बाहरी लिंक को हमेशा एक प्रोटोकॉल निर्दिष्ट करना चाहिए। मैंने एक सरल परीक्षण की कोशिश की: सभी ब्राउज़रों में //stackoverflow.comनक्शे जो file:///stackoverflow.comमैंने इसे आज़माए, इसलिए वे वास्तव में खुद से काम नहीं करते हैं।


5
यह वास्तव में अच्छा बिंदु है, मैं वास्तव में इस बारे में सोच रहा था क्योंकि मैं कल रात सो गया था। एक और मुद्दा यह है कि httpsया httpसंस्करण वास्तव में उपलब्ध नहीं हो सकता है, आप हमेशा यह नहीं मान सकते हैं कि यह है।
वेस्ले मर्च

1
एक ब्राउज़र के बाहर आप अपने दम पर हैं, इसलिए बोलने के लिए। अगर ईमेल या अन्य क्लाइंट को जावास्क्रिप्ट या सीएसएस आदि के बारे में पता है तो कोई कह नहीं सकता है। इसलिए यह बहुत ही महत्वपूर्ण है कि रिश्तेदार उरोजों के बारे में क्या कहते हैं?
क्रिस

मूट प्वाइंट नहीं है। कई ई-मेल क्लाइंट JS और ब्राउज़रों का समर्थन करते हैं, जो निश्चित रूप से लोड करते समय कर सकते हैं file://। यह एक मामूली यूसेक है, लेकिन जब यह आता है तो यह महत्वपूर्ण है।
जून-दाई बेट्स-कोबाशिगावा

मैं चाहता हूं कि http का उपयोग करने का एक तरीका था जब तक कि वर्तमान url https नहीं है, उस स्थिति में https का उपयोग करें , बल्कि यह निर्दिष्ट करने के लिए कि वर्तमान पृष्ठों के साथ लोड किया गया था , जो प्रभावी रूप से क्या //है , उसी प्रोटोकॉल का उपयोग करें
जून-दाई बेट्स-कोबाशिगावा

2
यदि आप कोई उदाहरण निर्दिष्ट करते हैं <base href="https://www.google.com">, तो आप वेब-साइड के बाहर की सामग्री देख सकते हैं। या तो <img src="//www.google.com/images/srpr/logo11w.png">या<img src="images/srpr/logo11w.png">
zig

3

इसका कारण पोर्टेबल वेब पेज प्रदान करना हो सकता है। यदि बाहरी पृष्ठ एन्क्रिप्टेड (http) नहीं है, तो लिंक की गई स्क्रिप्टों को एन्क्रिप्ट क्यों किया जाना चाहिए? यह एक अनावश्यक प्रदर्शन हानि प्रतीत होता है। मामले में, बाहरी पेज को एन्क्रिप्टेड (https) सुरक्षित रूप से ले जाया जाता है, फिर लिंक की गई सामग्री को भी एन्क्रिप्ट किया जाना चाहिए। यदि पृष्ठ एन्क्रिप्ट किया गया है, तो लिंक की गई सामग्री नहीं, IE एक मिश्रित सामग्री चेतावनी जारी करता है । कारण यह है कि एक हमलावर रास्ते में लिपियों में हेरफेर कर सकता है। लंबी चर्चा के लिए http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 देखें ।

HTTPS हर जगह EFF के अभियान https का उपयोग करना जब भी संभव हो पता चलता है। हमारे पास इन दिनों हमेशा एन्क्रिप्टेड वेब पेजों की सेवा करने की सर्वर क्षमता है।


0

सिर्फ पूर्णता के लिए। यह एक और सूत्र में उल्लेख किया गया था:

"दो फ़ॉरवर्ड स्लैश" "जो भी प्रोटोकॉल अभी उपयोग किया जा रहा है" के लिए एक सामान्य शॉर्टहैंड है

if (plain http environment) {
    use 'http://example.com/my-resource.js'
} else {
    use 'https://example.com/my-resource.js'
}

कृपया पूरा धागा जांचें।


-2

यह अब एक बहुत ही आम तकनीक है। कोई नकारात्मक पहलू नहीं है, यह केवल पृष्ठ पर सभी परिसंपत्तियों के लिए प्रोटोकॉल को एकजुट करने में मदद करता है इसलिए जहां भी संभव हो उसका उपयोग किया जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.