web-dev-qa-db-fra.com

Test de CORS avec l'outil Postman/cURL/dans la console Chrome

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:

  1. 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"]`
  1. J'ai remarqué que permettre http://jquery.com/ au lieu de http://jquery.com n'autorisera pas les requêtes dont l'origine est Origin=http://jquery.com?
  2. J'ai remarqué que cURL renvoie le contenu de la ressource (dans ce cas, des données JSON), même si la demande provient d'une origine non autorisée. Est-ce normal ou est-ce que cela signifie que j'ai oublié de configurer quelque chose sur le serveur qui expose ces données?
6
user3790827

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/

7
Gideon Pyzer

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

0
David Kochkerian