web-dev-qa-db-fra.com

Y a-t-il des inconvénients à utiliser une double barre oblique pour hériter du protocole dans une URL? src = "// domain.com"

J'ai une feuille de style qui charge des images à partir d'un domaine externe et je dois la charger à partir de https: // à partir de pages de commande sécurisées et http: // à partir d'autres pages, en fonction de l'URL actuelle. J'ai trouvé que le démarrage de l'URL avec une double barre oblique hérite du protocole actuel. Est-ce que tous les navigateurs supportent cette technique?

html ex:

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

css ex:

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

Si le navigateur prend en charge RFC 1808, section 4 , RFC 2396, section 5.2 , ou RFC 3986, section 5.2 , il utilisera bien le schéma de l'URL de la page. pour les références commençant par "//".

85
Remy Lebeau

Lorsqu'il est utilisé sur un link ou @import, IE7/IE8 téléchargera le fichier deux fois par http://paulirish.com/2010/the-protocol-relative-url/

Mise à jour de 2014:

Maintenant que SSL est encouragé pour tout le monde et ne pose pas de problème de performances , , cette technique est maintenant un anti-motif . Si l'actif dont vous avez besoin est disponible sur SSL, utilisez toujours le https:// atout.

65
meder omuraliev

Un inconvénient se produit si vos URL sont affichées en dehors du contexte d'une page Web. Par exemple, un message électronique contenu dans un client de messagerie (par exemple, Outlook) ne contient pas d'URL. Lorsque vous affichez un message contenant une URL relative au protocole, il n'existe aucun contexte de protocole évident (le message lui-même est indépendant). du protocole utilisé pour le récupérer, qu’il s’agisse de POP3, IMAP, Exchange, uucp ou autre) afin que l’URL n’ait pas de protocole relatif. Je n'ai pas étudié la compatibilité avec les clients de messagerie pour voir ce qu'ils font lorsqu'un modèle de gestionnaire de protocole manquant leur est présenté - je suppose que la plupart d'entre eux devront deviner sur http. Apple Mail refuse de vous laisser entrer une URL sans protocole. Cela ressemble à la façon dont les URL relatives ne fonctionnent pas dans la messagerie en raison d'un contexte manquant de la même manière.

Des problèmes similaires pourraient survenir dans d'autres contextes non HTTP, tels que les tweets, les messages SMS, les documents Word, etc.).

L'explication plus générale est que les URL de protocole anonymes ne peuvent pas fonctionner isolément; il doit être un contexte pertinent. Dans une page Web typique, il est donc judicieux d’insérer une bibliothèque de scripts de cette façon, mais tout lien externe doit toujours spécifier un protocole. J'ai essayé un test simple: //stackoverflow.com mappe sur file:///stackoverflow.com dans tous les navigateurs dans lesquels je l’ai essayé, ils ne fonctionnent pas vraiment par eux-mêmes.

60
Synchro

La raison pourrait être de fournir des pages Web portables. Si la page externe n'est pas cryptée (http), pourquoi les scripts liés devraient-ils être cryptés? Cela semble être une perte de performance inutile. Si la page externe est cryptée de manière sécurisée (https), le contenu lié devrait également être crypté. Si la page est cryptée, le contenu lié ne l'est pas, IE semble émettre un avertissement Contenu mixte . La raison en est qu'un attaquant puisse manipuler les scripts en chemin. Voir http://ie.Microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 pour une discussion plus longue.

La campagne HTTPS Everywhere de l'EFF suggère d'utiliser https autant que possible. Nous avons la capacité du serveur ces jours-ci pour servir des pages Web toujours cryptées.

3
koppor

Juste pour être complet. Cela a été mentionné dans un autre fil:

'Les deux barres obliques sont un raccourci commun pour tout protocole utilisé correctement'

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

S'il vous plaît vérifier le fil complet.

0
escapedcat