156 votes

Y a-t-il un inconvénient à utiliser une double barre oblique pour hériter du protocole dans une URL ? Par exemple, src="//domaine.com".

J'ai une feuille de style qui charge des images à partir d'un domaine externe et j'ai besoin qu'elle charge https:// à partir des pages de commandes sécurisées et http:// à partir d'autres pages, en fonction de l'URL actuelle. J'ai découvert que le fait de commencer l'URL par une double barre oblique hérite du protocole actuel. Tous les navigateurs prennent-ils en charge cette technique ?

html ex :

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

css ex :

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

1 votes

Est-ce que cela ralentit le site ???

2 votes

Il n'y a aucune raison que cela ait un impact sur les performances, sauf dans les cas que Meder a énumérés ci-dessous dans sa réponse.

0 votes

On dirait que j'étais sur quelque chose. Il y a quelques mois, Google Developers a commencé à utiliser cette convention sur la page de ses bibliothèques Javascript hébergées. developers.google.com/speed/libraries/devguide

90voto

Remy Lebeau Points 130112

Si le navigateur prend en charge RFC 1808 Section 4 , RFC 2396 Section 5.2 ou RFC 3986 Section 5.2 alors il utilisera effectivement le schéma de l'URL de la page pour les références qui commencent par "//".

8 votes

Ce système est-il compatible avec les principaux navigateurs ? (IE7, IE8, FF, Chrome, Safari)

22 votes

Étant donné que la première RFC à la décrire, la RFC 1808, a été rédigée il y a 15 ans et que les références URL sont essentielles à la fonctionnalité des sites Web, je pense que l'on peut affirmer sans risque que pratiquement tous les principaux navigateurs la prennent en charge à l'heure actuelle. Mais la seule façon d'en être sûr est de l'essayer vous-même et de voir ce qui se passe.

2 votes

Cette question a été liée à quelqu'un qui posait une question similaire, et je l'ai trouvée dans la RFC 1630 de l'année précédente (formulée différemment, mais autorisant toujours le format en question). Elle pourrait bien avoir été dans une forme ou une autre du document qui se trouvait à l'adresse suivante ftp://info.cern.ch/pub/www/doc/http-spec.txt à partir de 1991, si quelqu'un possède une copie d'archive.

67voto

meder Points 81864

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

Mise à jour de 2014 :

Maintenant que SSL est encouragé pour tous y n'a pas de problème de performance , cette technique est désormais un anti-modèle . Si le bien dont vous avez besoin est disponible sur SSL, alors toujours utiliser le https:// atout.

0 votes

@EricLaw Est-ce que ce problème est résolu dans IE9, quel que soit le mode de rendu, ou seulement en mode standard et toujours en mode Quirks ?

0 votes

Je suis presque sûr que cela a été corrigé dans tous les modes dans le scanner lookahead. Avez-vous vu le contraire quelque part ?

0 votes

SSL certainement fait ont un impact sur les performances. L'EFF n'écrit pas d'interfaces serveur-serveur, et l'autre site a peu d'expertise technique. De plus, c'est un anti-modèle de supposer que le vendeur d'un site Web appliquera de telles restrictions. Ainsi, les personnes qui écrivent des applications CSS et javascript ne devraient pas miser sur la question du protocole.

65voto

Synchro Points 2539

Un inconvénient se présente si vos URL sont consultées en dehors du contexte d'une page web. Par exemple, un message électronique se trouvant dans un client de messagerie (disons Outlook) n'a effectivement pas d'URL, et lorsque vous visualisez un message contenant une URL relative au protocole, il n'y a 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), de sorte que l'URL n'a pas de protocole auquel être relative. Je n'ai pas étudié la compatibilité avec les clients de messagerie pour voir ce qu'ils font lorsqu'ils sont confrontés à un gestionnaire de protocole manquant - je suppose que la plupart d'entre eux se contenteront de http. Apple Mail refuse de vous laisser entrer une URL sans protocole. C'est analogue à la manière dont les URL relatives ne fonctionnent pas dans le courrier électronique en raison de l'absence d'un contexte similaire.

Des problèmes similaires pourraient se produire dans d'autres contextes non HTTP, comme dans 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 de manière isolée ; il y a doit être un contexte pertinent. Dans une page web typique, il est donc possible de faire entrer une bibliothèque script de cette façon, mais tout lien externe doit toujours spécifier un protocole. J'ai fait un test simple : //stackoverflow.com mapas a file:///stackoverflow.com dans tous les navigateurs dans lesquels je l'ai essayé, donc ils realmente ne fonctionnent pas toutes seules.

5 votes

C'est un très bon point, j'y ai pensé en m'endormant hier soir. Un autre problème est que le https o http peut ne pas être réellement disponible, vous ne pouvez pas toujours supposer qu'elle l'est.

1 votes

En dehors d'un navigateur, vous êtes seul, pour ainsi dire. Rien ne permet de dire si le client de messagerie ou autre connaît le javascript ou le css, etc. C'est donc un point discutable concernant les urls relatives ?

0 votes

Ce n'est pas un point discutable. De nombreux clients de messagerie prennent en charge JS et les navigateurs le font certainement lorsqu'ils chargent à partir de file:// . C'est un cas d'utilisation mineur, mais quand il se présente, il est important.

3voto

koppor Points 2066

La raison pourrait être de fournir des pages web portables. Si la page extérieure n'est pas transportée de manière cryptée (http), pourquoi les scripts liés devraient-ils être cryptés ? Cela semble être une perte de performance inutile. Dans le cas où la page extérieure est transportée de manière sécurisée et cryptée (https), alors le contenu lié devrait être crypté également. Si la page est cryptée et que le contenu lié ne l'est pas, IE semble émettre un message d'erreur Contenu mixte avertissement. La raison est qu'un attaquant peut manipuler les scripts en cours de route. Voir http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 pour une discussion plus longue.

En HTTPS partout La campagne de l'EFF suggère d'utiliser le protocole https chaque fois que possible. De nos jours, nous disposons de la capacité de serveur nécessaire pour servir des pages web toujours cryptées.

1voto

escapedcat Points 235

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

Les "deux barres obliques" sont un raccourci commun pour "le protocole utilisé en ce moment".

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

Veuillez consulter le fil de discussion complet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X