web-dev-qa-db-fra.com

Appel interdomaine JavaScript: appel de HTTP vers HTTPS

Je dois effectuer un appel asynchrone vers une URL sécurisée (HTTPS) pour le même domaine.

Actuellement, la page fonctionne avec HTTP standard (non sécurisé).

En d'autres termes: cela appelle une URL dans le même domaine mais en utilisant HTTPS.

Avant de passer ces appels à HTTPS, j'ai terminé l'implémentation d'un proxy côté serveur pour autoriser les appels inter-domaines AJAX, mais maintenant je suis confronté à la même politique d'origine car HTTP et HTTPS sont également considérés comme des origines différentes. Ce proxy est donc inutilisable.

Résumé: comment faire entre domaines, asnynchrone POST requêtes dans ce scénario?

Notes diverses:

  • Je n'ai pu accepter aucune réponse suggérant JSONP. Les appels asynchrones doivent utiliser POST verb.
  • J'utilise la dernière version de jQuery. La réponse pourrait être basée sur cette bibliothèque ou sur toute autre solution à ce problème.
  • Accéder à la page entière via HTTPS n'est pas une solution.
  • La plate-forme serveur est Microsoft .NET 4.0 (ASP.NET 4.0).
  • UDPATE : CORS n'est pas une option. Il n'y a pas de large support pour cela dans les navigateurs modernes.
18

Tout d'abord, j'ai +1 aux deux questions de @missingo et @PiTheNumber.

Après avoir passé beaucoup d'heures, je suis arrivé à la conclusion que je vais passer la page entière en HTTPS. C'est parce que:

  • La plupart des navigateurs modernes prennent en charge CORS, mais Internet Explorer, à partir de la 8e version, a une implémentation propriétaire (objet XDomainRequest), qui peut être désactivée sur certains ordinateurs (la mienne avait la demande interdomaine désactivée par défaut dans la zone de sécurité Internet).

    • Opera ne prend pas en charge CORS. La 12ème version le supportera, mais ce n'est pas une option car les utilisateurs devraient d'abord adopter cette nouvelle version, et ce ne sera pas dans 2 jours.

    • J'ai besoin de faire des demandes inter-domaines car l'application client Web doit demander une couche de service RESTful située dans un autre domaine. En aucune façon.

    • Tout basculer vers HTTPS fait fonctionner à nouveau l'approche proxy de la couche de service (c'est le comportement attendu).

Merci quand même car les deux réponses m'ont beaucoup aidé pour arriver à cette conclusion.

MISE À JOUR

@Sam a ajouté un commentaire qui pourrait être intéressant pour n'importe qui. Il s'agit de savoir comment obtenir CORS dans Internet Explorer 8 et 9 (voir # 7): http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations- and-workarounds.aspx

14

J'utilise Access-Control-Allow-Origin . Vous envoyez simplement l'en-tête et tout va bien.

Voir aussi AJAX, sous-domaines et SSL

9
PiTheNumber

Vous devriez reconsidérer l'accès à la page entière via HTTPS ou au moins être vraiment sûr que ce n'est pas possible.

En chargeant la page initiale et le script sur HTTP, l'utilisateur n'a aucune garantie de sécurité que le script est celui que vous aviez initialement prévu d'envoyer et qu'il n'est pas manipulé par un tiers (par exemple, en enregistrant le mot de passe de son mot de passe). Cela signifie que toute demande HTTPS qui contourne le SOP ne fournira pas les mêmes garanties de sécurité qu'une demande HTTPS à partir d'une page initialement servie via HTTPS.

2
hugomg

Quelqu'un a-t-il regardé:

https://github.com/jpillora/xdomain

Il utilise postMessage et iframes pour réaliser les requêtes cors, et est multi-navigateur (pas besoin de serrer les dents XDomainRequests dans IE).

Peut-être qu'il autorisera les demandes de cors de protocole croisé?

1
Matt Newell