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 :
- 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") :
- 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération 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 - En attente de modération Dommage de ne pas avoir l'equivalent de la fonction PHP : header("Access-Control-Allow-Origin: *"); Bonne journée. |
|
| |
| |
|
| |
|