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" />
======= Mise à jour 11/3/2025 =======
Bon à savoir, il est également possible de renvoyer un "Access-Control-Allow-Origin" personnalisé dynamiquement sans modifier la configuration du serveur web. Dans ce cas c'est le code de la procédure appelée par le point d'entrée du webservice qui renvera l'entête. Les fonctions utiles sont :
- WebserviceEcritEntêteHTTP qui permet de renvoyer une entête, dont "Access-Control-Allow-Origin", et sa valeur,
- SysEnvironnement lorsque l'on a besoin d'avoir des informations sur le domaine qui a été utilisé pour appeler le webservice. Exemple : SysEnvironnement("REQUEST_URI").
|
|
< Retour
|
|
|
|
|
|