Je teste CORS avec l'outil Postman et je reçois constamment
access-control-allow-Origin → null
pour les demandes GET
ou OPTIONS
à
http://localhost:4000/api/accounts?Host=http://localhost:4200/&X-Origin=http://jquery.com
Utiliser aussi Origin
au lieu de X-Origin
ne modifie pas le résultat ..__ Pendant ce temps, si j'utilise cURL comme ceci
curl -H "Origin: http://jquery.com" --verbose http://localhost:4000/api/accounts
J'ai accès à l'API
< access-control-allow-Origin: http://jquery.com
J'ai également ouvert le site Web jQuery en utilisant http
et la console Javascript chromée afin d'exécuter ce code:
$.get("http://localhost:4000/api/accounts").then(function(val){console.log(val);})
Et il a imprimé l'objet JSON renvoyé par l'API.
Maintenant, mes questions sont les suivantes:
Comment puis-je tester correctement CORS avec Postman? J'ai remarqué que, lorsque l'option Autoriser les origines du serveur est définie sur *
, Postman renvoie
access-control-allow-Origin → *
Le problème mentionné ci-dessus n'apparaît que lorsque j'autorise explicitement un ensemble d'origines tel que:
`Origin: ["https://www.getpostman.com/", "http://localhost:4200/", "http://jquery.com"]`
http://jquery.com/
au lieu de http://jquery.com
n'autorisera pas les requêtes dont l'origine est Origin=http://jquery.com
?L'en-tête Origin
envoyé par le client est le schéma, le domaine et le port (sinon 80), d'où provient la demande. Le /
final n'est pas valide dans l'en-tête. Vous ne pouvez pas envoyer plusieurs origines non plus. Le Access-Control-Allow-Origin
envoyé par le serveur peut être soit *
, autorisant toutes les origines, soit vous renvoyer la même origine à partir de l'en-tête de la demande.
Par exemple, si vous faites une demande à http://www.telerik.com/
dans Chrome, l'en-tête de la requête contient Origin:http://www.telerik.com
(le navigateur l'envoie automatiquement) et l'en-tête de réponse du serveur contient Access-Control-Allow-Origin:http://www.telerik.com
.
En ce qui concerne votre dernière question, selon la spécification, l’agent utilisateur est responsable de l’application de CORS. Je suppose donc que cURL ne valide pas la correspondance entre la demande et la réponse.
L'agent d'utilisateur valide que la valeur et l'origine de l'endroit où le demande match originated.
Source:https://www.w3.org/TR/cors/
Tu peux essayer
curl -X OPTIONS ' https: //domain/path/file.png ' -H "origine: https: // yoursitedomain " -H "méthode de demande de contrôle d'accès: GET" - v -o/dev/null