Dave Ward dit:
Ce n'est pas exactement une lecture légère, mais la section 4.2 de la RFC 3986 prévoit des URL entièrement qualifiées qui omettent complètement le protocole (HTTP ou HTTPS). Lorsque le protocole d'une 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 dans lesquels vous l'essayerez:
//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 référencer le contenu tiers disponible via HTTP et HTTPS.
Cela résoudrait certainement un tas d'erreurs de contenu mixte que nous voyons sur les pages HTTP - en supposant que nos actifs sont disponibles via HTTP et HTTPS.
Est-ce complètement compatible avec tous les navigateurs? Y a-t-il d'autres mises en garde?
la source
Réponses:
Je l'ai testé à fond avant de publier. De tous les navigateurs disponibles pour effectuer des tests sur Browsershots , je n'ai pu en trouver qu'un qui ne gérait pas correctement l'URL relative du protocole: un navigateur obscur * nix appelé Dillo .
Il y a deux inconvénients sur lesquels j'ai reçu des commentaires:
la source
link
élément. Par exemple, lors de la spécification//fonts.googleapis.com/css?family=Rokkitt:400,700
, IE6 essaie de se chargerhttp://mysite.com/fonts.googleapis.com/css/<...>
. Pas si bon!La question de savoir si l'on peut modifier tous leurs liens pour qu'ils soient liés au protocole peut être théorique, compte tenu de la question de savoir si l'on doit le faire. Selon Paul Irish :
la source
Si vous utilisez des URL sans protocole pour charger des feuilles de style, IE 7 et 8 les téléchargeront 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.
la source
Oui, les références de chemin de réseau étaient déjà spécifiées dans la RFC 1808 et devraient fonctionner avec tous les navigateurs.
la source
Juste pour jeter cela dans le mélange, 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 tel
src="//cdn.example.com/js_file.js"
est le cassrc="file://cdn.example.com/js_file.js"
, car il ne fonctionnera pas car vous n'hébergez pas cette ressource localement.Microsoft Internet Explorer semble être particulièrement sensible à cela, voir cette question: impossible de charger jQuery dans Internet Explorer sur localhost (WAMP)
Vous essayerez 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 est d'avoir un repli lorsque la ressource n'est pas chargée correctement, mais cela ne fonctionne que si vous incorporez une vérification:
J'ai également posté cette réponse ici .
MISE À JOUR: HTML5Boilerplate utilise désormais
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
après avoir décidé de déprécier les URL relatives du protocole, voir ici .la source
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 a eu un bon article à ce sujet il y a quelque temps. Mais c'est perdu dans sa pile de billets de blog.
la source
Si vous souhaitez vous assurer que toutes les demandes sont mises à niveau vers un protocole sécurisé, il existe une option simple pour utiliser les demandes de mise à niveau-non sécurisées de l'en- tête de la politique de sécurité du contenu
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests
la source