web-dev-qa-db-fra.com

Détecter HTTPS avec JavaScript

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?

40
ntan

Vous pouvez utiliser le non standard

window.location.protocol 

Dans Firefox: documentation MDC

Dans IE, il semble

 document.location.protocol

documentation MSDN

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");
41
Pekka

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.

60
Rich

location.protocol fonctionne sur tous les navigateurs.

8
Ryan Fernandes

Que dis-tu de ça ?

 var protocol = window.location.href.indexOf("https://")==0?"https":"http";
7
Vic Seedoubleyew

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/

5
jberculo

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.

0
Yoh Suzuki