Puis-je changer tous mes liens http:// EN just //?

Dave Ward says,

ce n'est pas exactement une lecture légère, mais la section 4.2 de la RFC 3986 prévoit des URL pleinement qualifiées qui omettent le protocole (le HTTP ou HTTPS) tout à fait. Lorsque le protocole D'une URL est omis, le navigateur utilise plutôt le protocole du document sous-jacent.

pour faire simple, ces URL "sans protocole" permettent à une référence comme celle-ci de fonctionner dans chaque navigateur que vous essayez-la dans:

//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

cela semble étrange au début, mais cette URL" sans protocole " est la meilleure façon de référencer le contenu tiers qui est disponible via HTTP et HTTPS.

cela résoudrait certainement un tas d'erreurs à contenu mixte que nous voyons sur les pages HTTP -- en supposant que nos ressources sont disponibles via HTTP et HTTPS.

est-ce complètement cross-browser sont-ils compatibles? Existe-il d'autres mises en garde?

235
demandé sur unor 2011-01-28 21:29:25
la source

6 ответов

Je l'ai testé avant de le publier. De tous les navigateurs disponibles pour tester sur Browsershots , Je n'ai pu trouver qu'un seul qui ne gérait pas correctement L'URL relative du protocole: un obscur navigateur *nix appelé Dillo .

il y a deux inconvénients sur lesquels j'ai reçu des commentaires:

  1. les URL sans protocole peuvent ne pas fonctionner comme prévu lorsque vous" ouvrez " un fichier local dans votre navigateur, parce que le protocole de base de la page sera fichier:///. Surtout lorsque vous utilisez L'URL sans protocole pour une ressource externe comme une ressource hébergée par CDN. Utiliser un serveur web local comme Apache ou IIS pour tester contre http://localhost adresses fonctionne bien cependant.
  2. apparemment, il y a au moins une application de lecteur de flux pour iPhone qui ne gère pas correctement les URLs sans protocole. Je ne sais pas lequel a le problème ou à quel point il est populaire. Pour héberger un fichier JavaScript, ce n'est pas un gros problème puisque les lecteurs RSS ignorent généralement le contenu JavaScript de toute façon. Cependant, cela pourrait être un problème si vous utilisez ces URLs pour des médias comme des images à l'intérieur du contenu qui doit être souscrite via RSS (bien que, cette application de lecteur unique sur une plate-forme unique représente probablement un nombre très marginal de lecteurs).
201
répondu Dave Ward 2011-01-28 22:15:16
la source

la question de savoir si un pourrait changer tous leurs liens pour être protocolaire-relatif peut être sans objet, en examinant la question de savoir si un devrait le faire. Selon Paul Irish :

2014.12.17: maintenant que SSL est encouragé pour tout le monde et n'a pas de problèmes de performance, cette technique est maintenant un anti-modèle. Si l' le bien dont vous avez besoin est disponible sur SSL, alors toujours utiliser le https:// actif.

36
répondu Ohad Schneider 2016-02-06 00:35:55
la source

si vous utilisez des URLs sans protocole pour charger des feuilles de style, C'est-à-dire les 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 la bonne performance.

30
répondu Tim Beadle 2011-06-16 15:23:44
la source

Oui, les références de chemin réseau étaient déjà spécifiées dans RFC 1808 et devraient fonctionner avec tous les navigateurs.

15
répondu Gumbo 2011-01-28 21:33:17
la source

est-ce compatible avec tous les navigateurs? Existe-il d'autres mises en garde?

juste pour jeter cela dans le mix, si vous développez sur un serveur local, il 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" , ce qui va casser puisque vous n'hébergez pas cette ressource localement.

Microsoft Internet Explorer semblent être particulièrement sensibles à ce, voir la question: ne peut pas charger jQuery dans Internet Explorer sur localhost (WAMP)

Vous auriez probablement toujours essayer de trouver une solution qui fonctionne sur tous les 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 un contrôle:

<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 .

mise à JOUR: 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éprécier protocole d'Url relatives, voir ici .

3
répondu bg17aw 2017-05-23 13:31:09
la source

Je n'ai pas eu ces problèmes lors de l'utilisation ://domain.com -mais vous devez ajouter le côlon au début. Yoast a eu un bon article là-dessus il y a longtemps. Mais c'est perdu dans sa pile de billets de blog.

2
répondu user1431784 2017-05-26 21:22:07
la source

Autres questions sur http https url protocol-relative