2010-11-01 8 views
82

In letzter Zeit sah Arbeits Code-Blöcke wie folgt aus:URI beginnt mit zwei Schrägstrichen ... Wie verhalten sie sich? Ich

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

Und nach RFC 2396 (URI Syntax) und RFC 2616 (HTTP 1.1) diese URI mit zwei Schrägstrichen beginnen, sind gültig, aber leider sind die RFCs erkläre sie nicht wirklich.

Kann mir jemand auf eine Ressource verweisen, die erklärt, wie Browser diese URIs verarbeiten sollen/sollen/sollen?

Antwort

84

Die Ressource, die Sie suchen, ist die RFC 3986.

Siehe Abschnitt 4.2 und Abschnitt 5.4. Zitiert aus letzterem:

Referenzauflösung Beispiele

Innerhalb einer Darstellung mit einer gut definierten Basis-URI:

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

ein relatives wird auf sein Ziel umgewandelt URI wie folgt:

"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" 

Das bedeutet, wenn der Basis-URI http://a/b/c/d;p?q ist und Sie //g verwenden, wird die relative Referenz in http://g umgewandelt.

+4

so kann dies eine Lösung für die Verwendung von Javascript, um http oder https auf diese Weise zu bestimmen, was auch immer es ist, wird es funktionieren – Ibu

+0

Also wie kann ich "http: // a/b/c/g" mit ' // 'ohne all '/ a/b/c'? –

+0

Da Sie die übergeordnete Ebene erreichen müssen, verwenden Sie '../ g' - es wird das aktuelle Protokoll verwenden und zu 'http: // a/b/c/g' führen. –

28

Sie sind protokollunabhängige URLs. Wenn die Webseite auf https geliefert wird, verwendet die Anfrage https, wenn http dann http.

Paul Irish scheint sie in seinem Standardcode, indem es zu haben popularisiert.

54

Dies sind protocol relative URLs. Sie zeigen auf eine Adresse und behalten das aktuelle Protokoll bei.

Diese Notation wird häufig verwendet, um das Problem mit "gemischten Inhalten" zu vermeiden (eine IE-Warnmeldung klagt über http und https Ressourcen auf derselben HTTPS-Seite).

Update: Offizielle Dokumentation in RFC 3986:

Eine relative Referenz, die mit zwei Schrägstrich beginnt, wird Referenz ein Netzwerk-Pfad bezeichnet; Solche Referenzen werden selten verwendet. Eine relative Referenz, die mit einem einzelnen Schrägstrich beginnt, wird als absolute Pfadreferenz bezeichnet. Eine relative Referenz, die nicht mit einem Schrägstrich beginnt, wird als Relativpfadverweis bezeichnet.

+0

gut zu wissen, aber wie kompatibel ist dies mit gängigen Browsern. Eine schnelle Suche hat mir gesagt, dass es nicht mit IE6 funktioniert ... ist das eine HTML5-Funktion? –

+4

@Shane das sollte in allen Browsern funktionieren. Haben Sie einen Link, der behauptet, dass er in IE6 nicht funktioniert? –

+4

Ziemlich sicher, dass man eine IE1-Funktion ist! –

2

Seien Sie sich bewusst, dass es nicht nur http oder https ist unabhängig, aber auch Datei, ftp usw.

Es bedeutet, wenn Sie in Ihrem HTM Datei direkt öffnen Browser auf localhost, Browser wird // als Dateiprotokoll auflösen und Ihre Seite wird nicht funktionieren. Es kann Probleme in gepackten Websites als "native" App verursachen mit Tools wie Electron, PhoneGap usw.

Beispiel:

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

zu

<script src="file://mywebsite.com/resource.js"></script> 
Verwandte Themen