2010-11-01 29 views
82

Ultimamente ho visto lavorare code-blocchi come questo:URI che inizia con due barre ... come si comportano?

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

E secondo RFC 2396 (URI sintassi) e RFC 2616 (HTTP 1.1) questi URI iniziano con due barre sono validi, ma purtroppo la RFC non li spiego davvero.

Qualcuno può indicarmi una risorsa che spiega in che modo i browser devono/dovrebbero/devono elaborare questi URI?

risposta

84

La risorsa che stai cercando è la RFC 3986.

Vedere la sezione 4.2 e la sezione 5.4. Citando da quest'ultimo:

Riferimento Risoluzione Esempi

Da una rappresentazione con una base ben definita URI:

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

un relativo riferimento viene trasformato al suo bersaglio URI come segue:

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

Ciò significa che quando l'URI di base è http://a/b/c/d;p?q e si utilizza //g, il riferimento relativo viene trasformato in http://g.

+4

quindi questa può essere una soluzione all'utilizzo di javascript per determinare http o https in questo modo qualunque sia esso funzionerà – Ibu

+0

Quindi, come posso fare riferimento a 'http: // a/b/c/g' con' // 'senza tutto il// a/b/c'? –

+0

Dato che è necessario raggiungere il livello genitore, usare '../ g' - userà il protocollo corrente e porterà a' http: // a/b/c/g'. –

28

Sono URL di protocollo indipendenti. Se la pagina web viene pubblicata su https, la richiesta utilizza https, se http quindi http.

Paolo irlandese sembra averli popolare includendo nel suo codice standard.

54

Questi sono protocol relative URLs. Indicano un indirizzo, mantenendo il protocollo corrente.

Questa notazione viene spesso utilizzata per evitare il problema del "contenuto misto" (un messaggio di avviso IE che si lamenta delle risorse http e https nella stessa pagina HTTPS).

Aggiornamento: La documentazione ufficiale in RFC 3986:

Un riferimento relativo che inizia con due caratteri di barra viene definito un riferimento di rete-path; tali riferimenti sono usati raramente. Un riferimento relativo che inizia con un carattere di barra singola è definito un riferimento di percorso assoluto. Un riferimento relativo che non non inizia con un carattere barra è definito un riferimento percorso relativo.

+0

Grande di sapere, ma come compliant è questo con i browser più diffusi. Una rapida ricerca mi ha detto che non funziona con IE6 ... è una funzionalità HTML5? –

+4

@Shane questo dovrebbe funzionare in tutti i browser. Hai un link che afferma che non funziona in IE6? –

+4

Abbastanza sicuro che si tratti di una funzionalità IE1! –

2

Essere consapevoli di che si tratta non solo http o https indipendente, ma anche file di , ftp, ecc

Significa che se si apre htm di file direttamente nella vostra browser su localhost, il browser risolverà // come protocollo di file e la tua pagina non funzionerà. Essa può causare problemi in siti web imballato come app "nativa" utilizzando strumenti come Electron, PhoneGap, ecc

Esempio:

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

a

<script src="file://mywebsite.com/resource.js"></script> 
Problemi correlati