2011-01-11 5 views
139

Ho un foglio di stile che carica immagini da un dominio esterno e ho bisogno di caricarle da https: // da pagine di ordini sicure e http: // da altre pagine, in base al URL corrente. Ho scoperto che l'avvio dell'URL con una doppia barra eredita il protocollo corrente. Tutti i browser supportano questa tecnica?C'è qualche svantaggio nell'usare una doppia barra leader per ereditare il protocollo in un URL? es. src = "// domain.com"

html es:

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

css es:

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

questo rallenta il sito ??? – TheBlackBenzKid

+2

non c'è motivo per cui questo dovrebbe avere alcun impatto sulle prestazioni, tranne nei casi in cui Meder è elencato di seguito nella sua risposta. –

+0

Sembra che io stavo partecipando a qualcosa. Alcuni mesi fa, Google Developers ha iniziato a utilizzare questa convenzione nella sua pagina delle librerie Javascript ospitate https://developers.google.com/speed/libraries/devguide –

risposta

80

Se il browser supporta RFC 1808 Section 4, RFC 2396 Section 5.2 o RFC 3986 Section 5.2, allora sarà davvero utilizzare lo schema di pagina URL per i riferimenti che iniziano con " //".

+7

è supportato su tutti i principali browser? (IE7, IE8, FF, Chrome, Safari) –

+22

Considerando che il primo RFC per descriverlo, RFC 1808, è stato scritto 15 anni fa, e i riferimenti URL sono fondamentali per la funzionalità del sito web, penso che sia sicuro dire che praticamente tutti i principali browser lo supportano ormai. Ma l'unico modo per saperlo è semplicemente provarlo tu stesso e vedere cosa succede. –

+2

Questa domanda è stata collegata da qualcuno che ha fatto una domanda simile, e l'ho trovato in RFC 1630 l'anno precedente (indicato diversamente, ma consentendo comunque il formato in questione). Potrebbe essere stato in una forma o nell'altro del documento che era in "ftp: // info.cern.ch/pub/www/doc/http-spec.txt" a partire dal 1991, se qualcuno avesse un archivio copia. –

64

Quando viene utilizzato su una link o @import, IE7/IE8 sarà scaricare il file due volte al http://paulirish.com/2010/the-protocol-relative-url/

Aggiornamento dal 2014:

Ora che SSL è encouraged for everyone e doesn’t have performance concerns, questa tecnica è ormai un anti-pattern. Se la risorsa di cui hai bisogno è disponibile su SSL, quindi sempre utilizza la risorsa https://.

+17

Risolto in IE9, FWIW. – EricLaw

+19

HAHAHAHAHAHA. Come sempre non funziona proprio su IE più vecchi. Oh mio! –

+0

@EricLaw è quello corretto in IE9 indipendentemente dalla modalità di rendering o solo in modalità Standard e ancora interrotta in modalità Quirks? – scunliffe

59

Uno svantaggio si verifica se i tuoi URL sono visualizzati al di fuori del contesto di una pagina web. Ad esempio, un messaggio di posta elettronica che si trova in un client di posta elettronica (ad esempio Outlook) non ha effettivamente alcun URL e quando si visualizza un messaggio contenente un URL relativo al protocollo, non esiste affatto un contesto di protocollo ovvio (il messaggio stesso è indipendente del protocollo utilizzato per recuperarlo, sia che si tratti di POP3, IMAP, Exchange, uucp o qualsiasi altra cosa), quindi l'URL non ha alcun protocollo a cui fare riferimento. Non ho esaminato la compatibilità con i client di posta elettronica per vedere cosa fanno quando vengono presentati con un gestore di protocolli mancante. Suppongo che la maggior parte delle persone farà una supposizione su http. Apple Mail si rifiuta di farti inserire un URL senza un protocollo. È analogo al modo in cui gli URL relativi non funzionano nell'e-mail a causa di un contesto simile mancante.

problemi simili possono verificarsi in altri contesti non HTTP come nel tweet, messaggi SMS, documenti Word ecc

La spiegazione più generale è che gli URL di protocollo anonimi non possono lavorare in modo isolato; ci deve essere essere un contesto pertinente. In una tipica pagina web è quindi bene inserire in questo modo una libreria di script, ma ogni link esterno dovrebbe sempre specificare un protocollo. Ho provato un semplice test: //stackoverflow.com mappe a file:///stackoverflow.com in tutti i browser in cui l'ho provato, quindi loro in realtà non funzionano da soli.

+5

Questo è davvero un buon punto, stavo davvero pensando a questo mentre mi sono addormentato la scorsa notte. Un altro problema è che la versione 'https' o' http' potrebbe non essere effettivamente disponibile, non si può sempre presumere che sia. –

+1

Al di fuori di un browser sei da solo, per così dire. Non si può dire se l'e-mail o altro client sia a conoscenza di javascript o css ecc. Quindi questo è più o meno un punto controverso relativo agli url relativi? – chris

+0

Non un punto controverso. Molti client di posta elettronica supportano JS e certamente i browser quando caricano da 'file: //'. Si tratta di un caso d'uso minore, ma quando si presenta è importante. –

3

La ragione potrebbe essere quella di fornire pagine Web portatili. Se la pagina esterna non viene trasportata crittografata (http), perché gli script collegati devono essere crittografati? Questa sembra essere una perdita di prestazioni non necessaria. Nel caso in cui la pagina esterna sia trasportata in modo sicuro crittografato (https), anche il contenuto collegato deve essere crittografato. Se la pagina è crittografata, non il contenuto collegato, IE sembra emettere un avviso Contenuti misti. Il motivo è che un utente malintenzionato può manipolare gli script durante il percorso. Vedi http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 per una discussione più lunga.

La campagna HTTPS Everywhere di EFF suggerisce di utilizzare https quando possibile.In questi giorni abbiamo la capacità del server di servire le pagine Web sempre crittografate.

-2

Sembra essere una tecnica abbastanza comune ora. Non ci sono aspetti negativi, aiuta solo a unificare il protocollo per tutte le risorse sulla pagina, quindi dovrebbe essere usato ovunque possibile.