Je travaille avec une API odata, et lorsque j'utilise postman pour faire une demande GET, cela fonctionne parfaitement et j'obtiens la réponse comme je m'y attendais.
Mais lorsque j'utilise une demande d'extraction de mon application React, la demande renvoie un 401, en utilisant les mêmes en-têtes que ceux que j'ai utilisés précédemment dans Postman. Et il est dit que Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 401.
Une idée sur la façon de résoudre cette demande? Merci!
fetch('https://api4.successfactors.com/odata/v2/', {
method: 'GET',
headers: {
authorization: `Basic ${auth}`, //auth is the encoded base64 username:password
},
})
.then(response => response.json())
.then((response) => {
console.log('in response: ', response);
})
.catch((error) => {
console.log('in fetchJobs error: ', error);
});
Cela est probablement dû au fait que Postman n'envoie probablement pas de demande de contrôle en amont Options
avant votre GET
et, à la réception de la réponse GET
, n'effectue aucun type de vérification des cors ( car cela n'aurait pas vraiment de sens de toute façon).
D'un autre côté, lors de l'exécution de code à partir de votre page Web Chrome exécute à la fois un contrôle en amont Options
afin de déterminer quels paramètres de demande interdomaine il est autorisé à envoyer au serveur distant et vérifier si la réponse à la demande Options
a le Access-Control-Allow-Origin
en-tête pour autoriser votre Origin
(c'est-à-dire le domaine de la page à partir de laquelle vous faites la demande).
Généralement, un contrôle en amont Options
est envoyé au serveur par un navigateur pour demander au serveur s'il est autorisé à effectuer l'opération qu'il est sur le point d'effectuer - dans votre cas, un GET
. Si le serveur distant (interdomaine) ne répond pas à la demande de prélecture Options
avec les en-têtes corrects dans la réponse autorisant votre GET
, le navigateur n'en enverra pas. Cependant, vous n'allez pas aussi loin, car la réponse à votre demande Options
ne passe même pas elle-même un contrôle cors Origin
.
Si vous contrôlez le serveur, vous devez répondre à la demande Options
en définissant Access-Control-Allow-Origin
en-tête sur la réponse pour inclure le Origin
de votre page de demande, et également pour définir le Access-Control-Allow-Methods
pour inclure GET
(et probablement OPTIONS
). Si vous ne contrôlez pas le serveur distant, il est probable que tout service api normal tel que celui que vous essayez de frapper ait une configuration dans son backend que vous pouvez définir quelque part pour autoriser votre Origin
.
Vous pouvez en savoir plus sur le comportement des cors ici
Le moyen idéal consiste à autoriser sur votre serveur à autoriser les appels de différents domaines, mais si vous n'avez pas accès aux services principaux et de test, vous pouvez installer ce plugin chrome pour contourner le pré -demandes de vol. cors chrome
Vous rencontrez un problème CORS, afin de le surmonter, vous devez activer CORS sur votre backend.