Mon site utilise le protocole http et https; cela n'affecte pas le contenu. Mon site utilise des appels jQuery ajax, qui remplissent également certaines zones de la page.
Maintenant, je voudrais faire tous les appels ajax sur https. (s'il vous plaît ne me demandez pas pourquoi :)) Quand je suis sur une page avec le protocole https, les requêtes ajax fonctionnent. Lorsque je suis sur une page avec le protocole http, j'obtiens une erreur javascript: accès à l'URI restreint refusé
Je sais que c'est un problème de domaine croisé (en fait, c'est un problème de protocole croisé), et je sais que je devrais utiliser le même protocole dans les appels ajax que sur la page actuelle.
Néanmoins, je veux que tous les appels ajax soient https et les appeler sur une page qui a été servie via http. Existe-t-il une solution de contournement pour y parvenir (une solution json / proxy?), Ou est-ce simplement impossible?
Réponses:
Ajoutez l'en-tête Access-Control-Allow-Origin à partir du serveur
http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
la source
Essayez JSONP.
la plupart des bibliothèques JS le rendent aussi simple que les autres appels AJAX, mais utilisent en interne une iframe pour effectuer la requête.
si vous n'utilisez pas JSON pour votre charge utile, vous devrez déployer votre propre mécanisme autour de l'iframe.
personnellement, je redirigerais simplement la page http: // vers la page https: // one
la source
https:
http://example.com/ peut être résolu en un VirtualHost différent de https://example.com/ (qui, comme l'en-tête Host n'est pas envoyé, répond à la valeur par défaut pour cette IP), les deux sont donc traités comme séparés domaines et donc soumis à des restrictions JS interdomaines.
Les rappels JSON peuvent vous permettre d'éviter cela.
la source
Découvrez le projet OpenSource Forge. Il fournit une implémentation JavaScript TLS, ainsi que du Flash pour gérer les requêtes inter-domaines réelles:
http://github.com/digitalbazaar/forge/blob/master/README
En bref, Forge vous permettra de faire des XmlHttpRequests à partir d'une page Web chargée via http vers un site https. Vous devrez fournir un fichier de stratégie interdomaine Flash via votre serveur pour activer les demandes interdomaines. Consultez les articles de blog à la fin du README pour obtenir une explication plus approfondie de son fonctionnement.
Cependant, je dois mentionner que Forge est mieux adapté aux demandes entre deux domaines https différents. La raison en est qu'il y a une attaque MiTM potentielle. Si vous chargez le JavaScript et Flash à partir d'un site non sécurisé, cela pourrait être compromis. L'utilisation la plus sécurisée est de le charger à partir d'un site sécurisé puis de l'utiliser pour accéder à d'autres sites (sécurisés ou non).
la source
Vous pouvez essayer de charger la page https dans une iframe et acheminer toutes les requêtes ajax dans / hors du cadre via un pont, c'est un hackaround mais cela pourrait fonctionner (je ne sais pas si cela imposera les mêmes restrictions d'accès compte tenu du contexte sécurisé) . Sinon, un proxy http local pour rediriger les demandes (comme tout appel interdomaine) serait la solution acceptée.
la source
Voici ce que je fais:
Générez un iFrame masqué avec les données que vous souhaitez publier. Puisque vous contrôlez toujours cet iFrame, la même origine ne s'applique pas. Envoyez ensuite le formulaire dans cet iFrame à la page ssl. La page ssl redirige ensuite vers une page non-ssl avec des messages d'état. Vous avez accès à l'iFrame.
la source