Dave Ward dit,
La lecture n’est pas très claire, mais section 4.2 de la RFC 3986 fournit des URL entièrement qualifiées qui omettent complètement le protocole (HTTP ou HTTPS). Lorsqu'un protocole d'URL est omis, le navigateur utilise à la place le protocole du document sous-jacent.
En termes simples, ces URL "sans protocole" permettent à une référence comme celle-ci de fonctionner dans tous les navigateurs sur lesquels vous allez l'essayer:
//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js
Cela semble étrange au début, mais cette URL "sans protocole" est le meilleur moyen de faire référence à du contenu tiers disponible via HTTP et HTTPS.
Cela résoudrait certainement un tas d'erreurs de contenu mixte que nous constatons sur les pages HTTP - en supposant que nos ressources soient disponibles via HTTP et HTTPS.
Est-ce complètement compatible avec tous les navigateurs? Y a-t-il d'autres mises en garde?
Je l'ai testé à fond avant la publication. Parmi tous les navigateurs disponibles pour tester Browsershots , je n’en ai trouvé qu’un qui ne gère pas correctement l’URL relative au protocole: un obscur navigateur * nix appelé Dillo .
J'ai reçu des commentaires sur deux inconvénients:
La question de savoir si on pourrait changer tous leurs liens pour qu'ils soient relatifs au protocole peut être discutable, étant donné la question de savoir si on devrait le faire. Selon Paul Irish :
2014.12.17: Maintenant que SSL est encouragé pour tout le monde et ne pose pas de problèmes de performances, cette technique est désormais un anti-modèle. Si l'actif dont vous avez besoin est disponible sur SSL, alors utilisez toujours le https: // atout.
Si vous utilisez des URL sans protocole pour charger des feuilles de style, IE 7 & 8 les téléchargera deux fois: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download /
Donc, cela doit être évité pour CSS si vous aimez les bonnes performances.
Oui, les références de chemin d'accès réseau étaient déjà spécifiées dans RFC 1808 et devraient fonctionner avec tous les navigateurs.
Est-ce complètement compatible avec tous les navigateurs? Y a-t-il d'autres mises en garde?
Juste pour ajouter ceci, si vous développez sur un serveur local, cela pourrait ne pas fonctionner. Vous devez spécifier un schéma, sinon le navigateur peut supposer que src="//cdn.example.com/js_file.js"
est src="file://cdn.example.com/js_file.js"
, qui va casser puisque vous n'hébergez pas cette ressource localement.
Microsoft Internet Explorer semble être particulièrement sensible à cela, voyez cette question: Impossible de charger jQuery dans Internet Explorer sur localhost (WAMP)
Vous essaierez probablement toujours de trouver une solution qui fonctionne sur tous vos environnements avec le moins de modifications nécessaires.
La solution utilisée par HTML5Boilerplate consiste à appliquer un repli lorsque la ressource n'est pas chargée correctement, mais cela ne fonctionne que si vous incorporez une vérification:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- If jQuery is not defined, something went wrong and we'll load the local file -->
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>
J'ai posté cette réponse ici ainsi.
UPDATE: HTML5Boilerplate utilise maintenant <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
après avoir décidé de déconseiller les URL relatives au protocole, voir ici .
Je n'ai pas eu ces problèmes lors de l'utilisation de: //domain.com - mais vous devez ajouter les deux points au début. Yoast avait une bonne rédaction à ce sujet il y a quelque temps. Mais c'est perdu dans sa pile de billets de blog.