Page 1 sur 1

XMLHttpRequest interdit

Posté : 14 octobre 2015, 12:52
par ivan
Bonjour,

Je suis en train écrire un site-web qui appelle le serveur WFS pour chercher les arrêts bus proche de l'utilisateur. Donc c'est un requête AJAX, fait a partir de mon app (fait en Angular JS).

Le réponse(/error) donné par mon browser est:

XMLHttpRequest cannot load http://data.bordeaux-metropole.fr/wfs?R ... =[VOTRECLE]. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.0.104' is therefore not allowed access.

Donc ca me semble que vous devrait ajouter le header:
Access-Control-Allow-Origin: *
dans votre configuration apache/ngix/tomcat pour permettre les appelles vers cette URL depuis un app hébergé sur un autre URL.

Est-ce que vous pouvez confirmer cette 'bug' de configuration, ou sinon le moyen de connecter depuis AJAX. L'option 'JSONP' n'est pas un option car c'est XML, pas JSON.

Merci,

-ivan

Re: XMLHttpRequest interdit

Posté : 14 octobre 2015, 13:35
par Sébastien Cart-Lamy
Bonjour,
Je pense que le problème vient du navigateur, qui interdit le cross-domain. C'est dans la norme HTTP : les requêtes AJAX sur un domaine différent de la page sont interdits.
Rajouter des infos Access-Control-Allow-Origin: * ne changera rien.

Vous pouvez tester que c'est bien le navigateur qui bloque en désactivant la règle same-origin-policy (exemple avec firefox : http://stackoverflow.com/questions/1708 ... gin-policy)

Par contre, on peut charger des scripts javascript, des CSS ou des iframe d'autres domaines.

Un solution peut être d'utiliser un proxy PHP sur votre serveur - c'est ce que fait notre API CUB (et elle utilise du JSONP ;))

Re: XMLHttpRequest interdit

Posté : 14 octobre 2015, 13:51
par ivan
Merci pour votre réponse rapide,

C'est vrai que on peut faire un reverse proxy chez nous qui vas faire l'appelle et donc vas faire pensé le browser que les donnes sont 'locale', mais c'est un hack qui n'est pas nécessaire. Tous le monde qui utilise votre service vont être obligé de faire ca, mais si vous ajouter le header dans votre réponse ca vas n'être plus néccessaire.

Faites le meme requête vers l'API Toulouse:

http://api.tisseo.fr/v1/stop_points.jso ... Distance=1

Vous allez voir le header bien mis et donc les donnes accessible par AJAX sans proxy. Le 'norme' dont vous parlez est seulement appliqué quand le header n'est pas présente.

Access-Control-Allow-Headers:Access-Control-Request-Headers, Authorization
Access-Control-Allow-Origin:http://192.168.0.104

En suppriment le header vous n'êtres pas plus protégé que si c'est inclus, c'est juste plus chient pour nous, les utilisateurs !

j'espère que c'est clair avec ma mauvais francais...

-i

Re: XMLHttpRequest interdit

Posté : 14 octobre 2015, 14:28
par Sébastien Cart-Lamy
Bonjour,
Apparemment, cela n'a pas posé tant de problème que cela aux autres utilisateurs depuis l'ouverture il y a 4 ans. Beaucoup d'applications n'utilisent pas de navigateur et n'ont pas ce problème là.

Je regarde ce que je peux faire.

Re: XMLHttpRequest interdit

Posté : 14 octobre 2015, 14:57
par ivan
Bonjour,

Oui c'est surement un 'problème' liée au communications direct entre le navigateur et le WFS, donc appelles fait par python/php/apache etc n'ont pas le soucis. On peux faire le proxy work-around mais je préfère pas, c'est tout.

Merci de me tenir au courant si on as besoin d'attendre ou implementer le proxy.

cdt,

-ivan

Re: XMLHttpRequest interdit

Posté : 15 octobre 2015, 08:59
par Sébastien Cart-Lamy
Pouvez-vous réessayer ?

Re: XMLHttpRequest interdit

Posté : 19 octobre 2015, 10:20
par ivan
Bonjour,

Oui j'ai re-testé et ca marche nickel.

Merci beaucoup !

-i

Re: XMLHttpRequest interdit

Posté : 20 octobre 2015, 14:11
par ivan
oops, maintenant il y a un autre soucis, cette fois pour le server WPS.. en fait il y a deux headers: Access-Control-Allow-Origin, et donc j'ai l'erreur:

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://localhost' is therefore not allowed access.

donc je pense il faut juste 1 instance du header... (un peut nul je sais)

-ivan

Re: XMLHttpRequest interdit

Posté : 20 octobre 2015, 14:41
par Sébastien Cart-Lamy
Oui effectivement.

Je viens de me rendre compte que j'avais bien déjà activé il y a un moment le cross domain pour le WPS directement dans le service.

Et le fait de l'ajouter au niveau du serveur web pour tous les webservices, faisait un double header.

Problème résolu.

Re: XMLHttpRequest interdit

Posté : 20 octobre 2015, 15:32
par ivan
ah ok.

oui je confirme que ca marche maintenant.

merci beaucoup !

-i