Comment pouvez-vous déboguer des requêtes CORS en utilisant cURL? Jusqu'à présent, je n'ai trouvé aucun moyen de "simuler" la demande de contrôle en amont.
Voici comment vous pouvez déboguer les demandes CORS à l'aide de curl.
Envoi d'une demande CORS régulière à l'aide de cUrl:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Le -H "Origin: http://example.com"
drapeau est le domaine tiers faisant la demande. Remplacez quel que soit votre domaine.
L' --verbose
indicateur imprime la réponse entière afin que vous puissiez voir les en-têtes de demande et de réponse.
L'URL que j'utilise ci-dessus est un exemple de demande à une API Google qui prend en charge CORS, mais vous pouvez la remplacer par l'URL que vous testez.
La réponse doit inclure l'en- Access-Control-Allow-Origin
tête.
Envoi d'une demande de contrôle en amont à l'aide de cUrl:
curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Cela ressemble à la demande CORS régulière avec quelques ajouts:
Les -H
drapeaux envoient des en-têtes de demande de contrôle en amont supplémentaires au serveur
L' -X OPTIONS
indicateur indique qu'il s'agit d'une demande HTTP OPTIONS.
Si la demande de contrôle en amont aboutit, la réponse doit inclure les en Access-Control-Allow-Origin
- têtes de réponse Access-Control-Allow-Methods
et Access-Control-Allow-Headers
. Si la demande de contrôle en amont n'a pas abouti, ces en-têtes ne devraient pas apparaître ou la réponse HTTP ne sera pas 200.
Vous pouvez également spécifier des en-têtes supplémentaires, tels que User-Agent
, à l'aide de l' -H
indicateur.
--verbose
option, comme mentionné ci-dessus.--head
:curl -H "Origin: http://example.com" --head https://www.googleapis.com/discovery/v1/apis\?fields\=
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://example.com" -I https://s3.amazonaws.com/your-bucket/file
.Réponse mise à jour qui couvre la plupart des cas
Access-Control-Allow-*
votre ressource prend en charge CORS.Justification de la réponse alternative
Je google cette question de temps en temps et la réponse acceptée n'est jamais ce dont j'ai besoin. D'abord, il imprime le corps de la réponse qui est beaucoup de texte. Ajout de
--head
sorties uniquement aux en-têtes. Deuxièmement, lors du test des URL S3, nous devons fournir un en-tête supplémentaire-H "Access-Control-Request-Method: GET"
.J'espère que cela vous fera gagner du temps.
la source
--head
création de curl pour imprimer les en-têtes, mais aussi sur curl pour faire uneHEAD
demande plutôt que sur aGET
. Selon ce que vous testez, vous voudrez peut-être faire uneGET
demande. Vous pouvez le faire en ajoutant--IXGET
.Le script bash "corstest" ci-dessous fonctionne pour moi. Il est basé sur Jun commentaire ci-dessus.
usage
URL corstest [-v]
exemples
le résultat positif est affiché en vert
le résultat négatif est affiché en rouge et bleu
l'option -v affichera les en-têtes de boucles complètes
corstest
la source
On dirait que cela fonctionne:
curl -I http://example.com
Recherchez
Access-Control-Allow-Origin: *
dans les en-têtes renvoyésla source
*
cela ne fonctionne pas si des informations d'identification telles qu'un cookie doivent être présentées avec la demande d'API. Dans ce cas, le FQDN est également requis dans laAccess-Control-Allow-Origin
réponseAccess-Control-Allow-Credentials: true
. Les demandes avec accréditation n'ont pas été spécifiées comme une exigence par OP, donc*
fonctionne pour toutes les demandes non authentifiées.