wake-up-neo.com

Gibt es einen Nachteil bei der Verwendung eines führenden doppelten Schrägstrichs, um das Protokoll in einer URL zu erben? d.h. src = "// domain.com"

Ich habe ein Stylesheet, das Bilder von einer externen Domain lädt, und ich muss es von https: // von sicheren Bestellseiten und http: // von anderen Seiten laden, basierend auf der aktuellen URL. Ich fand heraus, dass das Starten der URL mit einem doppelten Schrägstrich das aktuelle Protokoll erbt. Unterstützen alle Browser diese Technik?

html ex:

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

cSS EX:

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

Wenn der Browser RFC 1808, Abschnitt 4 , RFC 2396, Abschnitt 5.2 oder RFC 3986, Abschnitt 5.2 unterstützt, wird in der Tat das Schema der Seiten-URL verwendet für Referenzen, die mit "//" beginnen.

85
Remy Lebeau

Bei Verwendung auf einem link oder @import, IE7/IE8 lädt die Datei zweimal pro http://paulirish.com/2010/the-protocol-relative-url/ herunter

Update von 2014:

Jetzt, da SSL für alle empfohlen und hat keine Leistungsprobleme , ist diese Technik jetzt ein Anti-Pattern . Wenn das von Ihnen benötigte Asset über SSL verfügbar ist, verwenden Sie immer das https:// Asset.

65
meder omuraliev

Ein Nachteil tritt auf, wenn Ihre URLs außerhalb des Kontexts einer Webseite angezeigt werden. Beispielsweise hat eine E-Mail-Nachricht in einem E-Mail-Client (z. B. Outlook) praktisch keine URL. Wenn Sie eine Nachricht anzeigen, die eine protokollbezogene URL enthält, gibt es überhaupt keinen offensichtlichen Protokollkontext (die Nachricht selbst ist unabhängig) des Protokolls, das zum Abrufen verwendet wird, sei es POP3, IMAP, Exchange, uucp oder was auch immer), sodass die URL kein Protokoll hat, zu dem sie relativ sein kann. Ich habe die Kompatibilität mit E-Mail-Clients nicht untersucht, um zu sehen, was sie tun, wenn ein fehlender Protokoll-Handler angezeigt wird. Apple Mail verweigert die Eingabe einer URL ohne Protokoll. Analog dazu funktionieren relative URLs in E-Mails aufgrund eines ähnlich fehlenden Kontexts nicht.

Ähnliche Probleme können auch in anderen Nicht-HTTP-Kontexten auftreten, z. B. in Tweets, SMS Nachrichten, Word-Dokumenten usw.).

Die allgemeinere Erklärung ist, dass anonyme Protokoll-URLs nicht isoliert funktionieren können. es muss einen relevanten Kontext geben. In einer typischen Webseite ist es daher in Ordnung, eine Skriptbibliothek auf diese Weise abzurufen. Bei externen Links sollte jedoch immer ein Protokoll angegeben werden. Ich habe einen einfachen Test ausprobiert: //stackoverflow.com entspricht file:///stackoverflow.com In allen Browsern, in denen ich es ausprobiert habe, funktionieren sie wirklich nicht alleine.

60
Synchro

Der Grund könnte sein, tragbare Webseiten bereitzustellen. Wenn die äußere Seite nicht verschlüsselt (http) transportiert wird, warum sollten die verknüpften Skripte verschlüsselt werden? Dies scheint ein unnötiger Leistungsverlust zu sein. Wenn die äußere Seite sicher verschlüsselt (https) transportiert wird, sollte auch der verknüpfte Inhalt verschlüsselt werden. Wenn die Seite verschlüsselt ist, gibt der verknüpfte Inhalt keine IE scheint eine Mixed Content Warnung aus. Der Grund ist, dass ein Angreifer die Skripte unterwegs manipulieren kann. Weitere Informationen finden Sie unter http://ie.Microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 .

In der EFF-Kampagne HTTPS Everywhere wird empfohlen, nach Möglichkeit https zu verwenden. Wir haben heutzutage die Serverkapazität, um Webseiten immer verschlüsselt zu bedienen.

3
koppor

Nur der Vollständigkeit halber. Dies wurde in einem anderen Thread erwähnt:

'Die beiden Schrägstriche sind eine gebräuchliche Abkürzung für jedes verwendete Protokoll.'

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

Bitte überprüfen Sie den vollständigen Thread.

0
escapedcat