J'essaie de trouver comment détecter avec JavaScript si je suis dans un environnement HTTP ou HTTPS.
J'appelle une demande Ajax, donc si je suis en HTTPS et que j'appelle HTTP Ajax, j'obtiens un 302 Déplacé temporairement.
Je pensais obtenir le courant window.location.href
et faites une manipulation de chaîne.
Quelle est la meilleure façon de détecter HTTPS en utilisant JavaScript?
Vous pouvez utiliser le non standard
window.location.protocol
Dans Firefox: documentation MDC
Dans IE, il semble
document.location.protocol
Je ne trouve pas d'informations fiables sur la façon dont cela se comporte sur d'autres navigateurs, mais je m'attends à ce qu'ils adhèrent au quasi-standard de document.location.protocol
.
Peut-être que le plugin jQuery url trie cela sans avoir à gérer les différences entre les navigateurs - je ne l'ai jamais utilisé moi-même, mais cela semble prometteur:
jQuery.url.attr("protocol");
En regardant comment google analytics ajoute son script à la page:
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Alors document.location.protocol semblerait sûr pour tous les navigateurs.
location.protocol
fonctionne sur tous les navigateurs.
Que dis-tu de ça ?
var protocol = window.location.href.indexOf("https://")==0?"https":"http";
Dans de nombreux cas, on peut complètement omettre le protocole. Donc, au lieu de
<img src="https://test.com/image.jpg" />
on pourrait utiliser
<img src="//test.com/image.jpg" />
Le navigateur ajoute ensuite automatiquement le protocole actuel. Cela fonctionne également pour inclure des fichiers dans la tête, et cela devrait également fonctionner pour les appels ajax.
Edit: Faire cela est maintenant considéré comme un anti-modèle:
Maintenant que SSL est encouragé pour tout le monde et n'a pas de problèmes de performances, cette technique est maintenant un anti-modèle. Si l'actif dont vous avez besoin est disponible sur SSL, utilisez toujours l'actif https: //.
Autoriser l'extrait à demander via HTTP ouvre la porte à des attaques comme la récente attaque Github Man-on-the-side. Il est toujours sûr de demander des ressources HTTPS même si votre site est sur HTTP, mais l'inverse n'est pas vrai.
voir: http://www.paulirish.com/2010/the-protocol-relative-url/
Il y a une bibliothèque vraiment soignée appelée URI pour des choses comme ça. https://github.com/medialize/URI.js
Vous n'avez probablement pas besoin de cela juste pour saisir le protocole, mais si vous allez manipuler des URI de chaîne, vous devriez l'utiliser.