Ajax permet de faire des requêtes vers le serveur indépendamment de l'internaute.
Peut-on l'utiliser pour faire des requêtes vers un autre serveur, par exemple un service web ?
problème de la Same-origin policy
Ce qu'il est interdit ou autorisé de faire en cross-origin n'est pas tout à fait intuitif !
iframe
, sauf si le serveur l'interdit)sinon n'importe quelle page pourrait accéder à votre webmail, par exemple
On ne fait pas directement la requête Ajax vers le service web, on la fait à notre serveur qui s'occupe de la « transférer ».
<script>
non soumise à la same origin policy<script>
vers l'URL du web service,
qui prend des paramètres, en général :
http://monservice.com?key=x32b&search=flower&callback=toto
toto({ JSON data });
, donc
l'exécution du script lance la fonction toto
toto
qui prend en paramètre l'objet JSON contenant les données structuréesmail.google.com
www.googleapis.com/books
Origin
dans ses requêtesAccess-Control-Allow-Origin
pour indiquer les domaines autorisésAccess-Control-Allow-Origin: null Access-Control-Allow-Origin: * Access-Control-Allow-Origin: http://foo.fr Access-Control-Allow-Origin: http://foo.fr http://bar.net
Origin
manuellement
Démo : récupération d'un fragment HTML avec CORS
On a vu au début que la même démo sans CORS ne fonctionne pas ; comparer les messages HTTP dans les deux cas avec la console web.Access-Control-Request-Method: PUT
Access-Control-Allow-Methods: PUT