13 juillet 2018
publié par 

L'accès aux API REST depuis un autre domaine dans un code navigateur (Cross-domain) nécessite l'ajout d'entêtes de réponses HTTP à votre site Web. CORS est l'acronyme de Cross Origin Ressources Sharing.

 

Lorsque qu'une requête Javascript provient d'un autre domaine que votre site, un dialogue s'instaure entre le navigateur et votre serveur Web. Ce dialogue est par défaut bloqué pour des raisons de sécurité.


Dans le cas d'un service REST, il faut évidement autoriser ces appels. Sans cela, un code navigateur d'un site WEBDEV, ou un code javascript d'un site quelconque, qui tente de consommer le webservice sera bloqué avec le retour suivant dans la console du navigateur :

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource ...
Reason: CORS header 'Access-Control-Allow-Origin' does not match

 

 

Pour cela, il faut autoriser :

  • l'accès à la ressource awws sur le serveur (par un header Access-Control-Allow-Origin),
  • la personnalisation dans les headers (Access-Control-Allow-Headers).


C'est sur le serveur Web que cela doit être configuré. Voici comment le faire avec un serveur IIS :

 

  1. Ouvrez le fichier « web.config » situé à la racine du site Web dans lequel le Service REST est déployé (clic droit sur le site dans la console de IIS, "Explorer") :


  2. Sous l'explorateur, il faut modifier ou créer le fichier texte « web.config ». Le fichier doit contenir les lignes suivantes :

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
    <httpProtocol>
    <customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://<domaine>" />
    <add name="Access-Control-Allow-Methods" value="POST,GET " />
    <add name="Access-Control-Allow-Headers" value="content-type" />
    </customHeaders>
    </httpProtocol>
    </system.webServer>
    </configuration>

    La listes des méthodes autorisées pour l'entête "Access-Control-Allow-Methods" (GET,POST,etc..) dépend des méthodes que vous avez implémentées dans votre service REST. Si un appel est fait avec une méthode qui n'est pas autorisée, l'appel va échouer avec le retour suivant dans la console du navigateur :
    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource
    Reason: Did not find method in CORS header 'Access-Control-Allow-Methods'.

    L'entête "Access-Control-Allow-Origin" doit contenir le <domaine> depuis lequel le webservice sera appelé. La syntaxe value="*" permet d'autoriser l'accès au webservice depuis n'importe quel domaine.

    L'entête "Access-Control-Allow-Headers" doit contenir les actions à autoriser. On ajoutera par exemple soapaction s'il s'agit de consommer un webservice SOAP :

    <add name="Access-Control-Allow-Headers" value="content-type,soapaction" />

     

< Retour

12 commentaires

SEDE JOEl HENRI
23/08/2018 - 09:12 - Répondre
Bonjour , j'aimerais attirer votre attention sur la fonction Encode et Decode. Sous IOS, j'ai eu a tester l'encodage en Base64, malheuresement les resultats n'etais pas convaincant

Guillaume BAYLE
27/08/2018 - 08:42 - Répondre
Bonjour, une difficulté sur ce point trouve généralement son origine en amont dans l'utilisation de l'ansi ou de l'Unicode pour la représentation des données. N'hésitez pas si la moindre difficulté subsiste à faire une demande de support depuis WINDEV Mobile : Accueil / Aide / requête au support technique. Cela permettra de vous orienter dans votre cas d'utilisation bien précis.

Henry
27/07/2020 - 14:14 - Répondre
Comment cela se fait-il sur Apache2? Je l'ai essayé en modifiant httpd.conf et WEBDEV25.conf, sans résultat. Avez-vous déjà implémenté quelque chose pour travailler avec Fetch sans changer le mode de connexion?

Loic HAMEL
27/07/2020 - 14:21 - Répondre
Bonjour, Je ne dispose malheureusement pas de détails sur la configuration Apache. C'est un point à voir avec votre hébergeur. Par contre, je ne vois pas en quoi cela concerne le mode de connexion et le fetch.

Sebastien
09/06/2021 - 18:29 - Répondre
Bonjour, Merci ça fonction très bien, mais pour 2 domaines en "Origin" (ou plus), quelle est la syntaxe....? Merci

Lasse Sandström
06/02/2022 - 00:11 - Répondre
Hi, are there help for rest api when using windev with httprequest. In english? or in finnish? best regards, Lasse Sandström

Guillaume BAYLE
07/02/2022 - 10:53 - Répondre
Hi, yes all functions are in the website : https://doc.windev.com/en-US/?1000021158. Support is also available in English : https://windev.com/ts/writets.htm

Ambroise
28/03/2022 - 21:13 - Répondre
Bonjour, j'utilise la plateforme PCSCLOUD, comment faire dans ce cas , comment accéder au fichier Web.config ? Quelqu'un a-t-il déjà traité ce cas. En vous remerciant de votre aide

Loic HAMEL
29/03/2022 - 08:34 - Répondre
Il vous suffit de contacter le support de votre plateforme pour leur demander d'ajouter les entêtes nécessaires.

Alexandre duhamel
12/04/2022 - 21:01 - Répondre
Bonjour, pour ma part sur le serveur iis j'ai ajouté les entêtes d'origine et j'ai ajouté un point d'entrée OPTION dans le serveur d'api rest mais rien n'y fait. J'ai bien un retour code 200 sur la requête OPTION mais la requête POST elle est en erreur.

wilfrid
20/06/2022 - 19:07 - Répondre
Comment le paramétrer sur linux, on a tout décortiqué on a rien trouvé pour passer les bons arguments aux headers

Philippe
24/11/2022 - 09:25 - Répondre
Dommage de ne pas avoir l'equivalent de la fonction PHP : header("Access-Control-Allow-Origin: *"); Bonne journée.

Publier un commentaire : 
Votre adresse email ne sera pas publiée